Mysql数据库复制系统(可解决中文乱码)
霁雪寒
![]()
|
1#
霁雪寒 发表于2008-04-08
Mysql数据库复制系统(可解决中文乱码)
Mysql在数据存储上可使用众多的字符集整理,由此也会产生很多意想不到的问题。
比如说以前的数据库使用的是默认的字符集latin,如果现在想要这些数据库使用中文来存储以方便阅读和即时修改,那么该如何处理呢? 为此,我编写了一个PHP网页,可用来复制以前的数据库,它的特点是能重新设定数据库的整理方式,操作方便而且简单。在使用这个网页之前,必须做好以下两点准备: 1.创建一个新的数据库,结构上除了字符集整理方式是按自己需求所设定,其它的要与被复制数据库相同。 2.确保浏览器支持javascript。 3.确保网页上所选定的charset字符集与新建数据库的字符集整理方式相同。 网页代码如下: <html> <head> <meta http-equiv="Content-Type" c> <title>Database Copy System</title> <script language="javascript"> <!-- function focusfirst(){ document.copydata.host.focus(); } window.onload=focusfirst; function showlist(menu){ var choice=menu.selectedIndex; for(n=1;n<10;n++){ //10最好改为当前连接的数据库个数,也可以设置为一个比较大的数字 var li=document.getElementById(menu.options[n].value); if(choice==i){ li.style.display="block"; } else { li.style.display="none"; } } } function showdst(){ dst.style.display="block"; chars.style.display="block"; per.style.display="block"; } //--> </script> </head> <body> <? echo "<form id='copydata' name='copydata' method='post'>"; echo "<table width='100%' style='font-family:Verdana;font-size:12px'>"; echo "<tr><th colspan='2'>Database Copy System For Mysql</th></tr>"; echo "<tr><td>Connect:</td><td>"; echo "<input type='text' id='host' name='host' value='127.0.0.1'>"; echo "<input type='text' id='user' name='user' value='root'>"; echo "<input type='password' id='pass' name='pass' value='root'>"; echo "<input type='submit' value='check'>"; echo "</td></tr>"; if($_POST[host]){ echo "<tr><td>"; $host=$_POST[host]; $user=$_POST[user]; $code=$_POST[pass]; $link=mysql_connect($host,$user,$code)or die("failed to connect!".mysql_error()); $db_list=mysql_list_dbs($link); echo "DB_src:</td><td>"; echo "<select id='db' name='db' style='font-family:Verdana' onchange='showlist(db);'>"; echo "<option value='nodb' selected>select one db</option>"; while($dbs=mysql_fetch_object($db_list)){ //数据库 $db=$dbs->Database; echo "<option value='$db'>$db</option>"; } echo "</select>"; echo "</td></tr>"; $db_list=mysql_list_dbs($link); while($dbsa=mysql_fetch_object($db_list)){ $dba=$dbsa->Database; mysql_select_db($dba,$link); $table_list=mysql_query("show tables"); echo "<tr id='$dba' name='$dba' style='display:none'><td>"; echo "Tables of ".$dba.":</td><td>"; echo "<select id='tables_".$dba."' name='tables_".$dba."' style='font-family:Verdana' onchange='showdst();'>"; echo "<option value='nota' selected>select one table</option>"; while($tables=mysql_fetch_row($table_list)){ //数据表 echo "<option value='$tables[0]'>$tables[0]</option>";; } echo "</select>"; echo "</td></tr>"; } echo "<tr id='dst' name='dst' style='display:none'><td>"; echo "DB_dst:</td><td>"; echo "<select id='dst' name='dst' style='font-family:Verdana'>"; $db_list=mysql_list_dbs($link); while($dbs=mysql_fetch_object($db_list)){ //数据库 $db=$dbs->Database; echo "<option value='$db'>$db</option>"; } echo "</select>"; echo "</td></tr>"; echo "<tr id='chars' name='chars' style='display:none'><td>select charset:</td>"; echo "<td><select id='char' name='char' style='font-family:Verdana'>"; $link=mysql_connect($host,$user,$code)or die("failed to connect!".mysql_error()); mysql_select_db("information_schema",$link); $sqla="select * from CHARACTER_SETS"; $result=mysql_query($sqla,$link)or die(mysql_error()); while($chars=mysql_fetch_array($result)){ echo "<option value='$chars[CHARACTER_SET_NAME]'>$chars[DEFAULT_COLLATE_NAME]</option>"; } echo "</select>"; echo "</td></tr>"; echo "<tr id='per' name='per' style='display:none'>"; echo "<td colspan='2' align='center'><input type='submit' name='per' value='Perform'></td></tr>"; } if($_POST[per]){ $host=$_POST[host]; $user=$_POST[user]; $code=$_POST[pass]; $db=$_POST[db]; $ta="tables_".$db; $table=$_POST[$ta]; $dst=$_POST[dst]; $char=$_POST[char]; echo "<tr><td colspan='2'><hr></td></tr>"; echo "<tr><td> connect:</td><td>host:".$host."\tuser:".$user."</td></tr>"; echo "<tr><td> charset:</td><td>charset:".$char."</td></tr>"; echo "<tr><td> from:</td><td>database:".$db."\ttable:".$table."</td></tr>"; echo "<tr><td> to:</td><td>db:".$dst."\ttable:".$table."</td></tr>"; echo "<tr><td colspan='2'><hr></td></tr>"; $link=mysql_connect($host,$user,$code)or die("failed to connect!".mysql_error()); mysql_select_db($db,$link); $column_list=mysql_query("show columns from $table"); $n=0; while($cols=mysql_fetch_array($column_list)){ $fa[$n]=$cols[Field]; $n++; } $sql="select * from $table"; $result=mysql_query($sql,$link)or die(mysql_error()); while($rows=mysql_fetch_array($result)){ for($i=0;$i<count($fa);$i++){ if($i==0){ $sa=$fa[0]; $sb="'".$rows[$fa[0]]."'"; } else { $sa=$sa.",".$fa[$i]; $sb=$sb.",'".$rows[$fa[$i]]."'"; } } $s="insert into $table (".$sa.")value(".$sb.")"; $link=mysql_connect($host,$user,$code)or die("failed to connect!".mysql_error()); mysql_query("set names '$char'"); mysql_select_db($dst,$link); echo "<tr><td>ok</td><td>$s;"; mysql_query($s,$link)or die("<br><font color='red'>failed to query</font>".mysql_error()); echo "</td></tr>"; } } echo "</table>"; echo "</form>"; ?> </body> </html> <!--默认的连接可以自己设定--> <!--DB_src为被复制数据库,DB_dst为新建数据库(即复制数据库)--> [ 本帖最后由 霁雪寒 于 2008-4-8 09:24 编辑 ] |