2010年8月24日 星期二

[引用]Mysqldump 的預設編碼 --default-character-set


出處:http://note.tcc.edu.tw/478.html
以前的經驗,寫下來以免忘記。
之前朋友的一個資料庫 BIG5 要我幫忙轉成 utf-8 的編碼。發現:
[資料庫 DB1]-->mysqldump --> 餵回[資料庫 DB2]   只能用原始程式開啟無亂碼。
[資料庫 DB1]-->mysqldump --> piconv  -f big5 -t utf8 -->轉成一堆亂碼-->餵回[資料庫 DB2]  都是亂碼。
於是我仔細研究他的資料庫,以及他的程式的存取方法,發現是這樣的:
資料庫校對:utf8_bin
資料庫連線:latin1
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
資料庫內容:big5
用國語說就是:存放在 utf8 編碼的資料庫中的 big5 編碼字元,但是要用latin1 的編碼連線取出
做了很多失敗的嘗試,後來才想到,那取出時就一定要先指字編碼的方式,才會是正常的結果。
所以我改下指令來 dump 時,把預設的 charset 寫入。
$ mysqldump --default-character-set=latin1 -u root -p -B DB1 > DB1_in_big5.sql
然後再 iconv
$ piconv -f big5 -t utf8 DB1_in_big5.sql> DB1_in_utf8.sql
最後再餵回去,成功。
補充說明
如果希望未來的連線方式都使用 utf8,則在回覆時,就應該要在 .sql 中指定 set names utf8;

【下列文章您可能也有興趣】

沒有留言: