2006-04-02

MySQL & utf8 (latin1 轉 utf8 完成!!)

之前裝 MySQL 時根本沒有去管編碼, 所以預設的編碼還是 latin1. 用起來一直沒有感覺到什麼問題, 因為資料進出的時候都經過一次轉碼的動作, 但是如果要把資料倒出來, 那可能會直接爆掉...

所以有把 MySQL 改成使用 utf8 編碼是很有必要的, 花了一點時間終於把資料安全的轉移完成, 我的平台是 FreeBSD 6.0 / MySQL 4.1, 其他平台應該也可行



1. 先檢查 MySQL 預設的編碼

mysql> show variables like '%character%'


port 安裝時預設是 latin1, 這時候應該看到的都是 latin1, 都是 utf8 的話就不用改了.

2. 把資料全部備份出來
注意要下參數指定編碼, 前一步驟查出來是哪一種, 就設定成哪一種

mysqldump -u root -p --default-character-set=latin1 --add-drop-table 資料庫名稱 > 備份檔名稱


3. 資料轉檔
像我的資料都是塞 utf8 進去, 所以備份出來的檔案內容都是用 utf8 編碼, 不需要特別去動. 有些程式可能是塞 big5 之類的進去, 這時候就要找程式來轉碼 ( 像是 iconv 或 ConvertZ 之類的編碼轉換程式 )

轉碼完成後要更改備份檔的內容, 把 latin1 通通改成 utf8, 其中可以找到的部分有兩種

一種是檔案開頭的 SET NAMES latin1

另一種是每個 table 都會有的 ENGINE=MyISAM DEFAULT CHARSET=latin1

4. 轉碼完成以後就可以去改 MySQL 本體了, 懶的話可以下個變數 WITH_CHARSET=utf8 重裝, 省掉打一堆指令又可能遇到問題的麻煩.

5. 重裝完成後照前面的步驟檢查編碼, 這時候應該都是 utf8, 把轉碼後的資料倒回 MySQL ,收工.

還好之前塞進去的資料都是用 utf8, 不然在轉碼的時候會累死人

沒有留言:

張貼留言