|
2007-7-28 10:39 AM
作者: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
|