discuz mysql 數據庫編碼轉換latin1->utf8

2007年三月13日由貝貝爸 Leave a reply »

幫朋友的論壇做了一次編碼轉換的工作。 系統是windows 2003,mysql4.1 discuz 5
本來以為很簡單,dump數據
mysqldump -u root -p –opt –default-character-set=latin1 \
–skip-set-charset olddb cdb_members > d:\bak\cdb_members.sql
出來,用工具轉一下編碼,然後再導入
mysql -u root -p –default-character-set=utf8 newdb < d:\bak\cdb_members.sql

實際操作並沒有想像的那麼簡單,最後解決的方案,也不是那麼複雜。

先說一下教訓,建立數據庫的時候,同一個應用,所有的編碼一定要一致 ,不然就是自尋煩惱,現在跟你說,你肯定說不好,但是有時候就是不注意。 要遷移的這個論壇就有兩種編碼gbk和latin1,目標是遷移到utf8,裡面gbk的雙字節數據全部是亂碼,嘗試改編碼也讀不出數據了,由於不是重要數據,後來就放棄轉碼了,據說原來就有亂碼的問題。
裡面還遇到一個問題就是老的數據是更改過的,目標db是全新安裝的,表結構不一致,好在新系統是老系統的子集,那麼我就以老表為參照物,來改新db的表結構。

導出用了mysqldump,這裡要提的是–default-character-set,後邊要跟數據表的編碼,不然導出的數據可能會亂碼。
問題出在import,轉編碼後import,怎麼也不成功,說什麼mysql數據庫gone away或者說duplicate,突然又一次成功,一看是因為建表語句的編碼設置沒有修改成utf8。
轉編碼用的ultraedit的轉換功能,後來懷疑ultraedit的轉換出錯,網上找了一個win版本的iconv裝上
iconv -f ISO-8859-1 -t UTF-8 original.txt> newfile.txt
問題依舊.其中有幾個小表,直接用導出的sql粘貼到phpmyadmin裡運行就可以了,但是會員和帖子表肯定不能用這個辦法。
還試用了把latin1的表修改字符,然後試圖用convert轉碼
update cdb_members set username=CONVERT(username USING utf8),也沒成功後來當我一籌莫展準備繳械的時候,想起了另外兩個功能
SELECT INTO OUTFILE

LOAD DATA INFILE
是另外一種導入導出的方法。 貼出使用的sq

SELECT
uid,
nickname,
site,
alipay,
icq,
qq,
yahoo,
msn,
taobao,
location,
customstatus,
medals,
avatar,
avatarwidth,
avatarheight,
bio,
signature,
sightml,
ignorepm,
groupterms,
authstr INTO OUTFILE 'd:/cdb_memberfields.txt'
FIELDS TERMINATED BY “,”
OPTIONALLY ENCLOSED BY “”"”
LINES TERMINATED BY “\r\n”
FROM gench2.cdb_memberfields;

然後轉換'd:/cdb_memberfields.txt' 的編碼為utf8,可以用ultraedit或者iconv,然後load到新數據庫的表
LOAD DATA INFILE 'd:/cdb_memberfields.txt' INTO TABLE cdb_memberfields
FIELDS TERMINATED BY “,”
OPTIONALLY ENCLOSED BY “”"”
LINES TERMINATED BY “\r\n”;

上面還有一個問題是TERMINATED,ENCLOSED的選取,如果選的不對,會load失敗。

附1:共遷移瞭如下表
cdb_attachments
cdb_forums
cdb_memberfields
cdb_members
cdb_onlinetime
cdb_posts
cdb_threads

附2:google到的鏈接

http://gentoo-wiki.com/TIP_Convert_latin1_to_UTF-8_in_MySQL

Popularity: 31%

相關文章

Advertisement

6 Responses

  1. 1樓的配置在mysql設置編碼預言。 mysql的默認Latin1

  2. 貝貝爸 說:

    你是怎麼做的? 導出成sql文件,亂麼?

  3. ZeroOne 說:

    我的WP的數據庫就是Latin1的,現在想轉成UTF8的,總是亂碼,不知哪步有問題……

Leave a Reply