from:http://hi.baidu.com/wangzengfang/blog/item/c9f97b7b34c6caf00bd18724.html
下面的文章可供參考,但我遇到了幾百兆的數(shù)量庫,幾次用此方法都失敗,原因是編輯器不能支持這么大的文本文件的編輯,另存為UTF8格式后,再次導(dǎo)入都不成功。

怎么辦呢?程序員還是靠程序吧。

從數(shù)據(jù)庫中取出中文字符串來,用函數(shù)一看是UTF-8格式的,所有不能再轉(zhuǎn)換為UTF-8格式的了,那怎么辦呢?仔細想想,原來的網(wǎng)頁顯示中文是可行的,這時實際上是在GBK,GB2312編碼下的。那我把字符串取出后轉(zhuǎn)換成GBK的,即UTF-8=>BGK,果然可以顯示了。注意這時網(wǎng)頁中所有的編碼都是UTF-8的了,應(yīng)該跟一般的UTF-8的網(wǎng)頁一樣可以插入到數(shù)據(jù)庫里了。但是插入記錄還是亂碼,于是把set names utf8再加上。竟然成功了。

但有個問題:為何字段格式是latin1,卻可以gbk顯示出來,但檢測卻是utf-8編碼,卻在utf-8下顯示不出來,必須轉(zhuǎn)換成bgk才可以顯示出來?找到一篇強文!http://hi.baidu.com/wangzengfang/blog/item/8563a8f9b56bd25d252df2d7.html


相信 MySQL 的編碼對很多人來說 … 一直是個相當(dāng)令人頭痛的問題 … 今天所要做的介紹是如何把數(shù)據(jù)庫的數(shù)據(jù), 由 latin1 轉(zhuǎn)成 utf8..

一般 .. MySQL 裝起來后(用 rpm 安裝) ,系統(tǒng)的默認編碼是 latin1.

而很多人在安裝一些網(wǎng)頁的系統(tǒng)時,如 wordpress、LifeType、phpBB … 等等,都會選擇 utf8 。

這時 … 系統(tǒng)一樣可以正常運作 … 只是當(dāng)用 phpmyadmin 進入管理數(shù)據(jù)庫時,就會發(fā)現(xiàn) .. 怎么中文字的部分都變成了歪七扭八 ..

或者一些鬼畫符的文字。如:凡事先å¾?工作講起

此現(xiàn)象就是 utf8 的文字以 latin1形式儲存,phpmyadmin 以 utf8 的數(shù)據(jù)讀取方式讀取 … 讀出來的數(shù)據(jù)就是這種鬼畫符…><。

若要解決 phpmyadmin 讀出的鬼畫符 … 有兩個方法:

1. 進入 phpmyadmin 內(nèi)一個名為 libraries 的子目錄 .. 編輯 select_lang.lib.php. 找到 $mysql_charset_map 這一段下方 ..

‘utf-8′ => ‘utf8′,把它改成‘utf-8′ => ‘latin1′,

然后存盤 … 這時候就可以發(fā)現(xiàn)原先的鬼畫符 … 這時候又都正常了.

2. 把數(shù)據(jù)庫的編碼轉(zhuǎn)成 utf8 …

步驟:

a. 把數(shù)據(jù)庫 dump 出來

mysqldump -u xxx -p database > database.sql –default-character-set=latin1

這時候 dump 出來的 database.sql 是 latin1 的文件格式,然而是 utf8 的文字數(shù)據(jù),因此這時若用 vi 開檔看它 …

還是會發(fā)現(xiàn)中文字是鬼畫符 … 這時不要被眼前的假象所騙 … 以為自己做錯 .. 幾接著做下一步驟。

b. 把 dump 出來的 database.sql 下載回去 .. 用 emEditor或者editplus等支持保存文件時可選擇文件存儲格式的編輯器把 database.sql 打開,

它可以正常識別 utf8 的文字 ..用字符串替換的功能,把 “latin1” 都替換成 “utf8” ,之后直接另存新檔 .. 這時把文件類型設(shè)定儲存成 UTF-8。

c. 再把 database-utf8.sql 上傳到 server .. 這時我們用 vi 開啟它 .. 就可以看見是正常的中文字 .. 這就表示檔案沒問題啰。

d. 把檔案匯入數(shù)據(jù)庫

mysql database < database-utf8.sql -u xxx -p --default-character-set=utf8

注意你的database名稱,如果你想把數(shù)據(jù)導(dǎo)入到另外一個數(shù)據(jù)庫中時,因為你想保留原來的數(shù)據(jù)庫中的數(shù)據(jù)。那你應(yīng)該先自己建立一個空的數(shù)據(jù)庫。這條命令并不能在數(shù)據(jù)庫不存在的情況下建立數(shù)據(jù)庫。

如果數(shù)據(jù)量不是很大 … 那么很快就可以完成這個步驟 .. 這時候若沒有錯誤訊息出現(xiàn) .. 那么恭喜你 ..

你已經(jīng)完成了數(shù)據(jù)庫轉(zhuǎn)換的工作了。如果有錯誤訊息出現(xiàn) .. 主要有兩個情形 ..

1. 文件文件內(nèi)的中文字,用 vi 看是亂碼 ..文件檔的格式不是 utf-8。

2. 匯入的時候漏掉指定采用 utf8 的數(shù)據(jù)編碼匯入。

以上的作業(yè)是在 數(shù)據(jù)庫系統(tǒng)都是處于 latin1 的環(huán)境底下,也就是沒有在 my.cnf 指定 default-character-set=utf8。