從Google(註1)上查到的資料顯示,不管是用phpMyadmin或是使用apples所寫的資料庫轉換程式,得到的結果都是亂碼(註2)。因為我不信邪,所以以上兩種方法我都試過請不要再試了。正確的方法是使用mysql的程式mysqldump,然後把dump出來的資料做簡單的編輯,再丟回資料庫即可。
- 找到mysqldump程式的位置並且執行:
mysqldump database > database.sql --default-character-set=latin1 -u abc -p
- -u 設定要使用的帳號
- abc 使用帳號名稱,通常是使用root或是有權限的帳號
- -p 要輸入密碼
- database 要輸出的資料庫名稱
- database.sql 輸出的資料庫存方檔案
- --default-character-set=latin1 設定讀出的編碼(根據自己的mysql編碼而設)
- 把datapase.sql這個檔案用Emeditor來編輯,把裡面的latin1全部用utf8換過。然後再另存新檔,並且記得用UTF-8來存(建議不要用本來的檔名,另設一個database_utf8.sql更好)。
- 把剛剛處理過的database_utf8.sql再傳回Mysql
mysql database < database_utf8.sql --default-character-set=utf8 -u abc -p
- 可以在傳入前把mysql的編碼換成utf-8,或是把mysql升級
運氣好的話照著以上的步驟若沒有出現錯誤的話,轉碼就成功了!但是,我在處理Mediawiki的資料庫的時候遇到了這樣的問題…
Specified key was too long; max key length is 1000 bytes
我試著改結構表, 但是不可行錯誤依舊存在。後來我才在這篇文章發現,原來我把Innodb也給丟出來了(囧)。我對著我有問題的那個資料表把ENGINE=MyISAM換成ENGINE=InnoDB, 就可以正常匯入!
然後進到phpMyAdmin裡面看資料庫,是中文!感動的無法言語 :'(
我是一直卡在編輯資料庫的檔案上,本來是試著用vim加上encoding去更改內容。不管我怎麼試好像都是錯的,可能是vim不能完全支援utf-8吧 :(
我後來我才發現,編輯檔案的工作交給Emeditor就可以了,畢竟這個是日本人所寫的程式阿。
註1. 我使用的關鍵字為「mysql utf8」或「mysql utf-8」
註2. 我連接進mysql的時候是使用utf-8,phpMyAdmin裡面顯示的校正也是utf-8,只有在系統編碼的地方才是latin1。
相關網頁:
0 comments: