2012/02/15

轉出 UTF8 編碼的 MySQL 檔

這真的是非常煩人的又浪費生命的問題!

如果您跟別人介紹您是一位網頁設計師,您寫 html,您設計 CSS,您使用 MySQL,
可是您不知道什麼是 utf8(!?)
拜託搞清楚它,拜託 ...

網頁 html 是 utf8 編碼,
可傳送到 MySQL 時連線是用 latin1 編碼(沒有先執行 SET NAMES 'utf8';),
存到 MySQL 時將也會是使用 latin1 編碼(MySQL 預設沒有強制轉碼)。

那這個資料庫用 phpMyAdmin 來瀏覽,將會是非常不堪的(phpMyAdmin 是全 utf8 連線)。
不管用什麼編碼都無法將 phpMyAdmin 介面正常顯示資料庫內的中文。
(p.s. 請參考 http://www.adsenseor.com/mysql/256.html 的狀況二)
(p.s. 如果有 Navicat 或類似的 GUI 工具,或許可以正常瀏覽、修改)

請使用 command line 模式進入 MySQL 的 bin 目錄,執行:
mysqldump --default-character-set=latin1 -u root -p 資料庫名稱 > to_utf8.sql

這時候產生的「to_utf8.sql」檔案,
其中的 row of data 的內容是 ANSI 編碼(default-character-set 指定的 latin1)!

在 Winodws 底下,可以用 notepad++ 之類的編輯器開啟「to_utf8.sql」,
然後轉存成 utf8 編碼,按鈕在最上面「檔案、檢視 ...」那排,麻煩找一下,記得存檔。

在 Linux 底下,可以使用:
iconv -f big5 -t utf8 to_utf8.sql > utf8.sql

此時,row of data 的內容也都會轉成 utf8 了。
但完成編碼轉換後,還有很重要的後續工作!

開啟轉成 utf8 編碼的 .sql 檔,應該會發現裡面有些地方還有:
「DEFAULT CHARSET=latin1」

用 vim 或隨便什麼編輯器,把 latin1 全部取代!

在 vim 使用:
%s/latin1/utf8/g

阿彌陀佛,放下 big5,立地成佛。

Reference :
http://www.adsenseor.com/mysql/256.html
http://blog.derjohng.com/2006/01/18/backup-mysql-utf8-data/
http://a-wei.net/archives/4
http://www.phpwact.org/php/i18n/utf-8/mysql
http://akrabat.com/php/utf8-php-and-mysql/
http://tympanus.net/codrops/2009/08/31/solving-php-mysql-utf-8-issues/
http://stackoverflow.com/questions/1707792/problem-in-utf-8-encoding-php-mysql
http://dev.mysql.com/downloads/gui-tools/5.0.html