[問題] BIG5(ANSI or Latin1)資料庫轉換成 UTF-8 的問題
發表於 : 2005-11-27 21:54
我的 MySQL 是 4.1 版,我現在想要把整討個論區的資料予以 UTF-8 化,phpBB 本身的程式轉換是 ok 的,我在公司已經有實戰經驗,但我自己的網站討論區在 mysqldump 出來後的資料約為 182MB,用 notepad、EmEditor、UltraEdit 都有難以編輯的問題,速度很慢很慢,只要稍微增刪修就要等個十幾秒以後才有反應。(P4 3.0G with 1GB memory)
因為討論區運作多年,各式各樣的留言都有,原本以 BIG5 運作,我也不知道為什麼沒有"許功蓋"這類的問題,現在看了 dump 出來的東西發現都已經有自動加上 "\" 來解決 BIG5 編碼時的問題。
然則這樣的 dump 檔,利用 ConvertZ 直接轉換成 UTF-8 後,那些原本為了解決「許功蓋」等的"\"就變成多餘的,而且嚴重干擾 SQL 語法,造成我無法 restore 回資料庫。
然後我自己發現,dump 出來的檔案,不要轉換成 UTF-8,保持原本 BIG5(ANSI) 的狀態,在前方加上:
還有每一個 CREATE TABLE 語句的結尾修改為:
就可以減少很多的錯誤,還原較大比例的資料回資料庫(代價是原本的許會變成"許\\",但我可以接受),而且進入資料庫時是 UTF-8,然而,還是有些許問題,我想要手動修正這些問題,仔細一看 dump 檔的結構,發現在 insert 句子這裡,mysqldump 出來的檔案是這樣的結構:
如果只有兩筆也就算了,問題是我討論區有上萬筆的紀錄,都被他寫成一句 insert,造成我 debug 的超大障礙。反觀 phpmyadmin 的輸出功能,其做出的 sql 語法就是這樣的:
這樣子至少很好 debug 啊~錯到哪裡可以告訴我正確的行數,我還比較好找問題。要怎麼樣才可以讓 mysqldump 出來的格式與 phpmyadmin 做出來的 insert 一樣呢?
拉拉雜雜講了一堆,也許我根本走偏了,是否有有經驗的人,轉換過像我這種超過 150MB 的資料庫到 UTF-8 的?
因為討論區運作多年,各式各樣的留言都有,原本以 BIG5 運作,我也不知道為什麼沒有"許功蓋"這類的問題,現在看了 dump 出來的東西發現都已經有自動加上 "\" 來解決 BIG5 編碼時的問題。
然則這樣的 dump 檔,利用 ConvertZ 直接轉換成 UTF-8 後,那些原本為了解決「許功蓋」等的"\"就變成多餘的,而且嚴重干擾 SQL 語法,造成我無法 restore 回資料庫。
然後我自己發現,dump 出來的檔案,不要轉換成 UTF-8,保持原本 BIG5(ANSI) 的狀態,在前方加上:
代碼: 選擇全部
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=big5;
SET CHARACTER_SET_RESULTS=utf8;
代碼: 選擇全部
ENGINE=MyISAM DEFAULT CHARSET=utf8
代碼: 選擇全部
INSERT INTO `banlist` VALUES (1,12192,'',NULL),(2,25735,'',NULL);
代碼: 選擇全部
INSERT INTO `banlist` VALUES (1,12192,'',NULL)
INSERT INTO `banlist` VALUES (2,25735,'',NULL)
拉拉雜雜講了一堆,也許我根本走偏了,是否有有經驗的人,轉換過像我這種超過 150MB 的資料庫到 UTF-8 的?