Mysql 4 big5轉到Mysql 5 UTF8的方法

其實每每重灌之後,不管是在工作上或是在自修或是其他方面,在資料恢復的時候總會遇到些許的問題,像是 apache -> apache2,Mysql 4.x -> Mysql 5.x,而偏偏網站都是用這些軟體,心裡想阿~~如果套件版本都不變的化那該有多好阿…XD

我現在遇到的是 Mysql 4.0 -> Mysql 5.0 的問題,事實上之前也碰過 4.0 -> 4.1 還要去執行 mysql_fix_privilege_tables 之類的,不過大家有興趣的話去 google 找找相關討論應該也是有滴,這是一隻 script,記得去修改內容加入 mysql root 的密碼就可以了,題外話就不多說了。

我自己的問題是參考底下的作法來做的,並且將4.0舊的 /etc/mysql/debian.cnf 裡面的 password 參數,替換到新的 5.0 的 debian.cnf,不是整個檔案替換捏!!不做也是可以,只是啟動會有錯誤訊息而已。

原文是在 http://www.j2h.tw/bbs/bbs16/150.html 底下是全文收錄,以免我自己以後忘記… XD

———————————–分 割 線———————————————-

從MySQL4.0升級至5.0。

首先把資料dump出來 。由於先前用4.0時我的資料是存成latin1,不管是Big5或是wordpress的UTF-8存進去後都是變成lantin1,所以dump出來 後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上–default-character-set=latin1

如果原先是Big5的資料,像我的Coppermine Photo Gallery,dump出來後就直接把Big5轉成UTF-8即可

#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql

#piconv -f big5 -t utf8 output.sql >utf8.sql

如果原先是UTF-8的資料,像是wordpress,dump出來後要先轉成Big5後,再把他轉成UTF-8,因為原先dump出來的是偽裝成UTF-8的lantin1不是真正的UTF-8

#mysqldump -u帳號 -p –default-character-set=latin1 資料庫 >output.sql

#piconv -f utf8 -t big5 output.sql > big5.sql

#piconv -f big5 -t utf8 big5.sql >utf8.sql

接著MySQL5.0灌好後,MySQL的my.cnf設定檔內要加入以下設定

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci

但也有看到資料說[mysqld]那邊加上 default-character-set=utf8跟 default-collation=utf8_general_ci後,一些舊的使用Big5編碼的php程式,又沒有加入連資料庫時指定的編碼方式的 相關code的話,那些程式就會爛掉,所以目前我是沒有加上那兩行。

接著建立空的資料庫準備把dump出來的資料import進去,SQL語法應該類似下面這樣,要加上DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

CREATE DATABASE `abc` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

我是用phpMyAdmin建立資料庫的,建立時」校對」要選utf8_general_ci

再來就是把剛剛dump出來後的sql檔在import進去了,這裡有兩點要注意的。
1.剛剛dump出來的sql檔如果原先是Big5里面會有一些像是許功蓋這些字後面會多了一個」\「,記得用文字編輯器把他消掉2.import進去時記得還要先修改一下dump出來的sql檔,在最前面加上

SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;

再來把每個資料表後面的

TYPE=MyISAM;

改成

ENGINE=MyISAM DEFAULT CHARSET=utf8;

都改好後就可以把他import進去了

#mysql -u帳號 -p 資料庫 <>

不過以上實在有點麻煩,所以我把多餘的」/「消掉後,就直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可

順便記一下寫php時如是配合UTF-8的資料庫的話該注意,在真正送出query前要先加入以下三行

mysql_query(」SET NAMES 『utf8『」);
mysql_query(」SET CHARACTER_SET_CLIENT=utf8「);
mysql_query(」SET CHARACTER_SET_RESULTS=utf8「);

留言