MySQL目前已經是Community Server 5.1的版本,
甚至5.4 Beta也開放下載了
這次要處理的是常見的編碼轉換問題,
雖然資料庫的升級並不是常常在做,
通常在升級http server時也不會去動到database的東西,
這種平時就運作得好好的資料庫,
少動少事,一動就擔心不曉得會造成怎樣的災難,
(尤其資料筆數是以數量級在算時)
因此在真正需要升級時, DDL部份向下相容是沒問題的,
不過資料內容就很容易遇到編碼不同造成轉完資料庫後變亂碼的情形
今天要來處理的是早期MySQL資料庫的轉換,
在早期的MySQL版本中, 通常不會去設定欄位或資料表的編碼,
只要它吃進去什麼東西後, 能原封不動地吐出來就好,
而目前front-end application越來越多樣化,
對編碼的格式做額外處理(例如多語系的變換),
所以最好還是在升級的時候, 一併做編碼的轉換,
這樣可以省下未來可能會遭遇編碼問題時花費的時間
一般透過mysqldump指令產生的原始資料庫文件, 通常預設是latin1編碼,
不過也可能根據具體的MySQL server的編碼設置而不同,
mysqldump指令如下
mysql -u root -p -h localhost database > dumpfile.sql
在dump完成後, 修改dump file並在最前面加入以下述敘:
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
* 注意: 若新的MySQL版本低於4.1, 則不需加入上述語法, 否則會產生unknown variable
接著用iconv轉換dump出的資料庫文件:
iconv -c -f big5 -t utf8 dumpfile.sql > utf8-dumpfile.sql
寫入資料庫: (請先確認你有了原始資料庫的備份再來做)
mysql -u root -p < utf8-dumpfile.sql
[...] 至於檔案編碼轉換的方式則可參考MySQL編碼轉換: BIG5 to UTF8的iconv指令 [...]