2006年6月11日 星期日

把phpbb2由big5轉換到utf8

因為最近給篇文的技術性偏低,所以發篇How to來充充版面。

[前言-可略過]
星期五我收到彰化地政的信,他們說討論區最近常常會上不去,於是我趕緊連上去看,發現mysql有問題,於是我趕緊跑到資訊中心去關切一下主機(為什麼不用遠端?因為那是2000Server),其實到那邊也查不出個什麼,因為筆者對mysql沒有研究,再來那台主機中毒了,開個commond都很慢,netstat也不能運作,雖然錯誤訊息寫,過多的連線,但是我也不知道哪來的連線,大概就是這樣,於是我想到把整個mysql都轉移到itc身上暫存,所以我把mysqldump出來(4.x版需要使用命令列mysqldump -u root -p --alldatabse > data.sql),然後把資料弄回宿舍,回到宿舍我打了通電話給彰化地政士公會總幹事,向她說明情況,接著我上phpbb2官方去找新版(這個討論區是2003/09建立的phpbb2.0.6),發現官方在06/07發佈了2.0.21可能是因為時差的關係,sf.net的所有映像站都還沒有檔案,於是進度暫停到今天,想說跟總幹事說兩天解決,於是上官方去看已經可以下載了就弄下來裝,因為上次鼐鼐不小心砍掉phpbb2的時候我就升級一次,所以知道大概的步驟,首先要將原本的資料會出後轉成utf-8接著把這些資料弄進資料庫中,再來更新資料庫格式,最後修改phpbb2的include/db.php,然後就可以收工了。

[工具]
Notepad++
phpmyadmin

[步驟]
1.匯出資料
mysqldump -u root -p [dbname] > data.sql

2.轉碼

2.1 用Notepad++打開data.sql
2.2 建立一個新的頁籤,把新建立的頁籤編碼改為UTF-8(無BOM)
2.3 將data.sql文件全選複製後貼到新的頁籤中
2.4 將新的頁籤存檔

3.修改資料

3.1 刪除search_wordlist這個資料表資料的部份(建立資料表的部份請留下,這個部份是去除可能會造成匯入失敗的搜尋紀錄)

4.匯入資料
4.1 使用phpmyadmin建立資料庫,編碼請選擇utf8_general_ci
4.2 匯入資料 mysql -u root -p [dbname] < data.sql
4.2.1 用phpmyadmin檢查資料庫中的資料中文是否正確
4.3 執行phpbb2目錄下indtall/update_to_latest.php(請先確認設定檔config.php是有效的)

5.修改includes/db.php, 在 ?>之前加上

$db->sql_query("SET NAMES utf8;");
$db->sql_query("SET CHARACTER_SET_CLIENT=utf8;");
$db->sql_query("SET CHARACTER_SET_RESULTS=utf8;");


6.測試及善後
升級可能會造成某些東西變成亂碼,這個需要手動去修改,另一個需要修改的第方是,如果原本是big5編碼的版本改為utf8的時候,設用者個人設定中的語言會出現找不到語言檔的問題,可以使用下列SQL語法"UPDATE [前置名稱]_users set user_lang=chinese_traditional"一次把所有的使用者都改成繁體中文。