【教學】MySQL 4.0 BIG5 to UTF-8

作者:Linux0911
發表日期:2007-7-28 10:39 AM
最後修改:2007-8-17 12:39 AM
轉載請註明來源:http://linux0911.no-ip.info/Discuz/viewthread.php?tid=9122



昨晚做了個 Discuz! 資料庫由 big5 轉為 utf-8測試

伺服器環境如下:
Apache 1.3.37
PHP 4.4.7
MySQL 4.0 Standard
phpMyAdmin 2.7.x
Discuz! 5.5.0 BIG5

必須準備的工具:
UltraEdit
EmEditor
ConvetZ

請注意:

當你轉為 utf-8 的時候, 在帖子中的一個中文字元算 3 字元 (意思就是三個英文或數字)
原本 big5 是算 2 字元

所以你有的文章標題剛好滿 27 個中文字就會被截斷 (當你在論壇還是 big5 的時候, 轉為 utf-8 就會被截斷)

我先解釋我自己電腦測試整個的歷程

1. 把原論壇的資料用 Discuz! 後台的部分來備份
[attach]4341[/attach]
不過注意一點, 因為 MySQL 4.0 含以前的版本並沒有支援 編碼校對 這東西

強制字元集 (Charset) 只有預設的這個選項, 就是 Big5



2. 備份出來的 xxx.sql 檔案 (很多分卷) 呢, 先移到其他資料夾 (待會要用)



3. 在建立一個 Discuz! 5.5.0 UTF-8 版的新論壇 (去 Discuz! 官網下載)



4. 新論壇建立完成後, 將剛剛備份的 xxx.sql 檔放到 ./forumdata/backup_torCYI/ 底下



5. 再到 資料恢復 裡面點選導入, 它會自動導入其他分割的部分 (因為你在備份的時候它會自動切割 2048 kb 為一卷)

在導入的過程, 可能會出現 你無權訪問系統設置

到首頁重新登錄即可, 但同時, 不要亂動任何部分, 我們現在的焦點都放在後台的部分



6. 導入完成後, 到後台更新論壇統計每一個都按一次, 按完後再按更新快取 (cache)



7. 然後到首頁你會發現所有的文字變成看不懂的蟲型文字



8. 這時候, 到 phpMyAdmin 底下, 將新論壇的資料庫裡面的資料表一個一個導出來, SQL 格式



9. 就在此時, 你每個資料表都導出來後, 用 ConvertZ 開啟 cdb_xxx.sql 檔案

編碼由 Big5 轉到 utf-8

然後再由  UltraEdit 開啟 cdb_xxx.sql 檔案

會有 INSERT INTO........ 很多行

你就從第一個 INSERT INTO 開始複製起來 (建議一次 1000 筆資料)

它上面會有結構 CREAT TABLE, 不要理它

從 INSERT 開始才是我們要的部分

這時候將該 資料表phpMyAdmin 清空

每次要INSERT INTO 的 sql 檔都要注意, 資料表要對齊, 不要清錯資料表

注意:剛剛複製起來的 1000 筆資料不是到 phpMyAdmin 的 SQL 語法執行

而是在 Discuz! 後台的升級資料庫, 執行這 1000 筆資料 cdb_xxx.sql 檔案




10. 當你要轉換 cdb_members 的時候 (重要! 攸關會員登錄問題)

請直接到 phpMyAdmin, 選取論壇資料庫內的 cdb_members 資料表

然後選上面的 SQL, 在資料庫 discuz 執行以下指令:

[attach]5337[/attach]

如果你的 phpMyAdmin 是 big5, 請使用右鍵將網頁編碼改為 utf-8 之後

再將 cdb_members.sql 內的 INSERT INTO 貼在 在資料庫 discuz 執行以下指令: 裡面

即可從 big5 的 phpMyAdmin 導入 utf-8 編碼的資料



11. 升級成功後, 你將會發現這些看不懂的文字, 看得懂了!


請把全文看完幾遍後再操作




但是發現有些問題存在

a. 從原先舊論壇後台導出的 xxx.sql 檔案, 跟 phpMyAdmin 不太一樣的地方就是他的編碼是 Discuz! 特有的

意思就是必須從 Discuz! 系統才能還原

b. 從 MySQL 4.0 + Discuz! BIG5 版本導出的資料庫, 都會在衝碼字後面加上反斜線, 還有換行也包含在內, 都會加上反斜線

這是蠻麻煩的一件事, 要去掉還真花時間, 如果你的 post 資料超過 1,000,000 比, 可能要花上一整天來改 INSERT INTO 的衝碼字

c. 有時候你的文章出現奇怪的字, 不知道是簡體字 GBK 還是 UTF, 它會破壞原本的資料結構

例如它可能是
複製內容到剪貼簿
代碼:
INSERT INTO cdb_XXX VALUES ('xxx?, '');
這個結構上是無法正常執行的, 如果你眼尖, 可以發現少一個 '

所以要去找這些問題的存在

改為
複製內容到剪貼簿
代碼:
INSERT INTO cdb_XXX VALUES ('xxx?', '');
才能正常的導回資料庫


結論:

以上這樣子的小型測試, 可能純粹巧合, 不過實驗證實可以成立

可以將 MySQL 4.0 資料庫, Discuz! 論壇編碼由 big5 轉為 utf-8

善用 EmEditor 來去掉資料庫內的反斜線

它選取衝碼字的時候會有兩個反斜線

你在取代欄位將該衝碼字後面的兩個反斜線去掉

再進行取代就 ok 了~

[attach]5304[/attach]
像是這樣子就好了

請勿一次全部替換掉所有反斜線


這樣會破換 Discuz! 資料庫的結構, 所以你在後台升級資料庫的時候, 將錯誤的行數找出來

再去 phpMyAdmin 找到資料庫裡面的資料表 看到哪裡行出錯

再找到 cdb_xxx.sql 檔案找出, 是不是衝碼字, 是不是多了一個反斜線

那再從該行數下繼續 INSERT INTO 下去即可完成

即是善用導入跟導出來解決這個問題, 不過要注意一下 phpMyAdmin 跟 Discuz! 的導入系統

兩個是要相配合, 不是單由一個程式來備份跟還原



還有很多疏漏的部分, 本人能力有限, 希望有人能幫忙測試結果

一同研究


如果成功轉換為 utf-8 編碼, 那我想在日後的 MySQL 4.1.x ~ 5.x.x 版本資料庫上搬資料

都會輕鬆許多了



希望各位在閱讀本文的同時, 能夠幫助您加深理解資料庫的結構, 以及資料庫的邏輯思維

運行方式, 希望對想從 MySQL 4.0 BIG5 轉到 UTF-8 的網友, 有進一步的了解!


 附件: 您所在的用戶組無法下載或查看附件

標籤: MySQL BIG5 UTF-8
評論(10)

我知道AL8一個叫天使的會員
會用這個編碼
但我看了一下
好亂 看不太懂



你的環境如果是 MySQL 4.0 的話可以做測試

如果你需要升級 MySQL 版本的話



請問這些圖片不能覆制的方法是怎樣做



我每次都會卡在把會員匯過去後, 他們無論輸入什麼密碼都會說找不到此用戶

就算我在後台更改他們的密碼也沒有用 = =



引用:
原帖由 freedomman 於 2007-12-25 01:41 AM 發表
請問這些圖片不能覆制的方法是怎樣做
?_? 什麼圖片不能複製?
引用:
原帖由 formyrain 於 2008-9-15 09:18 PM 發表
我每次都會卡在把會員匯過去後, 他們無論輸入什麼密碼都會說找不到此用戶

就算我在後台更改他們的密碼也沒有用 = =
沒有轉成功, 部分資料表還是 big5 或甚至 latin1 charset



回覆 6# Linux0911 的帖子
?_? 什麼圖片不能複製? <-- 這個他是說 頭像那兒吧@.@""呵呵



回覆 7# teng 的帖子
如果指的是頭像的話, 就請愛用 google 找尋相關語法吧



引用:
原帖由 Linux0911 於 2008-9-20 02:16 AM 發表

沒有轉成功, 部分資料表還是 big5 或甚至 latin1 charset
這是指member的資料表沒有轉成功嗎



不過我將資料庫存下來看 發現所有的資料表都是CHARSET=utf8
這樣為什麼還會無法登入 ~"~



論壇備份數據庫時不是已經有了輸出編碼格式了嗎??

我就是用那個方法很快速地完成了,big5轉utf-8


發表評論
本文章已關閉或您沒有權限發表評論。