精做高難度防水抓漏/壁癌/油漆等工程 責任施工、合約保固! | 油漆工程,講究細部修整 防潮粉刷,免費估價! |
mysql big5 轉 utf-8 |
房東:阿文 發表時間:2007-03-17 | [檢舉] |
當網站改版時,要把以往mysql的big5資料轉換成utf-8時,常常會是個頭痛的問題。 要轉換,你的新舊資料庫都有phpmyadmin的介面,另外還得有big5->utf-8的工具,在windows上中文轉換工具首選為ConvertZ,在linux上得轉碼工具為iconv。 首先,檢查看看phpmyadmin在輸出csv檔案時會不會有問題。 stripslash為把字串去掉反斜線的函式,但是在處理big5碼的時候便會碰到難題,他會將big5的斜線去掉,以至於轉出來的文字變成亂碼。新版的phpmyadmin已經沒有這個問題,但是要看看舊版有沒有在轉出的時候加上這個函式,得把他去掉 編輯 phpmyadmin/libraries/export/csv.php 在function PMA_exportData裡頭,找到while迴圈,並找找看有沒有stripslash的function: while ($row = PMA_DBI_fetch_row($result)) ..... $row[$j] = stripslashes($row[$j]); 把function拿掉,留下$row[$j];就好。 第二,輸出csv資料。到phpmyadmin的輸出頁面,針對舊資料庫一次一個表格輸出。調成csv匯出,存檔。 第三,匯出資料庫的結構schema。到phpmyadmin的輸出介面,針對全部的表格,調成SQL輸出,並且不要包含資料,下載回來的是單純的sql結構檔。 第四,打開convertz,對剛剛轉下來的csv轉換成utf8的動作。 第五,到新資料庫,先把剛剛.sql的結構給匯入,建立好空的table格式。如果在mysql4.1以後,如果有預設連線校對,匯入的表格統統都會用該連線校對設定。 第六,一個一個資料表,匯入剛剛存下的csv檔。 最後,檢查看看新資料庫有沒有亂碼。 這應該是個笨方法,不過目前沒有出現中文轉換的問題。如果一直試不成功\,不妨也可以試看看這個笨方法。 |
廣利不動產-板橋在地生根最實在--新板特區指名度最高、值得您信賴的好房仲 完整房訊,房屋、店面熱門精選物件,廣利不動產 優質仲介,房屋租賃、買賣資訊透明,交易真安心! 廣利不動產-新板特區指名度最高、值得您信賴的好房仲 您的托付,廣利用心為您服務 |
1 樓住戶:小橋 發表時間:2007-03-17 | [檢舉] |
將 big5 轉成 utf-8 環境 : 所以寫了這支程式 , 這支程式 會 dump 出 db 下的所有 insert 的 query , 使用方法 1. 將 big5 環境的 create dump 出來 , 然後 再將 CHARSET=latin1 或 CHARSET=big5 改成 CHARSET=utf8 然後 create 一個空的 databases + table . 2. 下載 metabase : 請參考附件 3. convert.php CODE: #!/usr/bin/php -q set_time_limit(0) ; ############################################################################ # sql link start ############################################################################ $db_type = "mysql"; $host_name = "localhost" ; $database_name = "heyforum_dz5" ; $user_id = "root" ; $user_password = "xxxxxxxxxxxx" ; include_once("metabase/metabase_interface.php"); include_once("metabase/metabase_database.php"); $db_params=array( "Host" =>$host_name ,"Type" =>$db_type ,"User" =>$user_id ,"Password" =>$user_password ,"IncludePath" =>"metabase/" ,"Persistent" =>0 ); ############################################################################ # sql link end ############################################################################ $error=MetabaseSetupDatabase($db_params,$db); MetabaseSetDatabase($db,$database_name); $query ="show tables"; $db_res=MetabaseQuery($db,$query); if(!$db_res) { ecstart_alert_err($msg["system_err"]); } $rows=MetabaseNumberOfRows($db,$db_res); MetabaseGetColumnNames($db,$db_res,$db_field_name); if($rows) { for($row=1;$row<=$rows;$row++) { if(is_array($db_field_name)){ foreach($db_field_name as $key => $value){ $table[$row-1]=MetabaseFetchResult($db,$db_res,$row-1,$key) ; } } } } if(is_array($table)){ foreach($table as $k => $v){ $query ="describe ".$v; $db_res=MetabaseQuery($db,$query); if(!$db_res) { ecstart_alert_err($msg["system_err"]); } $rows=MetabaseNumberOfRows($db,$db_res); MetabaseGetColumnNames($db,$db_res,$db_field_name); if($rows) { for($row=1;$row<=$rows;$row++) { if(is_array($db_field_name)){ foreach($db_field_name as $key => $value){ $field[$v][$row-1]=MetabaseFetchResult($db,$db_res,$row-1,"field") ; } } } } //print_r($field); } } if(is_array($field)){ foreach($field as $k => $v){ // get field value $query ="select * from ".$k; $db_res=MetabaseQuery($db,$query); if(!$db_res) { ecstart_alert_err($msg["system_err"]); } $rows=MetabaseNumberOfRows($db,$db_res); MetabaseGetColumnNames($db,$db_res,$db_field_name); if($rows) { for($row=1;$row<=$rows;$row++) { if(is_array($db_field_name)){ foreach($db_field_name as $key => $value){ $field_value[$row-1][$key]=MetabaseFetchResult($db,$db_res,$row-1,$key) ; } } $no = 0 ; $field_str = ""; foreach($v as $fv){ if($no == 0){ $field_str .= "`".$fv."`"; } else{ $field_str .= ",`".$fv."`"; } $no = $no+1 ; } $sno = 0 ; $field_value_str = ""; foreach($field_value[$row-1] as $fvk => $fvv){ if($sno == 0){ $field_value_str .= "'".mysql_escape_string(iconv('BIG5','UTF-8',$fvv))."'"; } else{ $field_value_str .= ",'".mysql_escape_string(iconv('BIG5','UTF-8',$fvv))."'"; } $sno = $sno+1 ; } $query = "insert into ".$k."(".$field_str.") values(".$field_value_str.");"; unset($field_value[$row-1]); unset($field_str); unset($field_value_str); echo $query . "\n"; //print_r($field_value); } } unset($field_value); } } MetabaseCloseSetup($db) ?> 4. 將 convert.php 存檔後 執行 ./convert.php > convert.sql 5. mysql database_name -uroot -p < convert.sql 好了 |