Linux0911
(若不堅持,一切都會變樣 ...) Administrator
1#
大 中
小 發表於 2007-7-28 10:39 AM 主題編號:9122 文章編號:18740
TOP
顯示全部帖子
【教學】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! 後台 的部分來
備份
不過注意一點, 因為
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 執行以下指令:
如果你的 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 了~
像是這樣子就好了
請勿一次全部替換掉所有反斜線
這樣會破換 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
Hack 安裝錯誤, 80% 來自粗心, 請專心安裝
Linux0911 打造您的個性論壇
本人現在忙於研究所, 沒多的時間管論壇, 有問題別發 pm 給我, 謝謝~
Linux0911 Forum © 2004-2009 All Rights Reserved.