總結下MYSQL編碼轉換的問題latin1轉utf8

黑面


昨天碰到個PHP網站,數據庫是MYSQL5.1的,進瞭網站的phpmyadmin管理後發現表內中文全部顯示亂碼,導出後本地導入一樣是亂碼,無法查看所需要的信息,亂碼一般情況不用說都知道多數是編碼的問題,查看瞭下目標庫的編碼為latin1,估計網站程序是GBK的。。。直接備份下載,下載到本地需要轉換下編碼,可惜以前沒搞過,網上搜索瞭一堆資料測試。。。具體有這幾種我給需要的朋友總結下,就不用到處搜索瞭


一:


1、備份數據庫


mysqldump –default-character-set=latin1 –create-options=false –set-charset=false -u root -p 數據庫名稱 > E:ack.sql


2、創建新數據庫


CREATE DATABASE 數據庫名稱 CHARACTER SET utf8 COLLATE utf8_general_ci;


3、導入數據


mysql -u root -p –default-character-set=gbk 數據庫名稱 < E:ack.sql


 


二:


步驟一 命令行執行:mysqldump –opt -hlocalhost -uroot -p*** –default-character-set=lantin1 dbname > /usr/local/dbname.sql


步驟二 將 dbname.sql文件中的create table語句的CHARSET=latin1改為CHARSET=utf8


步驟三 在dbname.sql文件中的insert語句之前加一條set names utf8;


步驟四 將dbname.sql轉碼為utf-8格式,建議使用UltraEditor,可以直接使用該編輯器的轉換->ASCII到UTF-8(Unicode編輯),或者將文件另存為UTF-8(無BOM)格式


步驟五 命令行執行:mysql -hlocalhost -uroot -p*** –default-character-set=utf8 new_dbname < /usr/local/dbname.sql


總結:這種方法有個致命之處就是當數據中有大量中文字符和其他特殊符號字符時,很有可能導致在[步驟五]時報錯導致無法正常導入數據,如果數據庫比較大可以分別對每張表執行上述步驟


 


三:


為瞭解決第一種方法中總結時說到的問題,在網上苦苦查找瞭一天資料才東拼西湊的搞出一個比較穩妥的解決方法


步驟一 將待導出的數據表的表結構導出(可以用Phpmyadmin、mysqldump等,很簡單就不說瞭),然後將導出的create table語句的CHARSET=latin1改為CHARSET=utf8,在目標庫newdbname中執行該create table語句把表結構建好,接下來開始導出-導入數據


步驟二 命令行:進入mysql命令行下,mysql -hlocalhost -uroot -p*** dbname


步驟三 執行SQL select * from tbname into outfile /usr/local/tbname.sql;


步驟四 將tbname.sql轉碼為utf-8格式,建議使用UltraEditor,可以直接使用該編輯器的轉換->ASCII到UTF-8(Unicode編輯),或者將文件另存為UTF-8(無BOM)格式


步驟五 在mysql命令行下執行語句 set character_set_database=utf8;  註:設置mysql的環境變量,這樣mysql在下一步讀取sql文件時將以utf8的形式去解釋該文件內容


步驟六 在mysql命令行下執行語句 load data infile tbname.sql into table newdbname.tbname;


註意:千萬不要忘瞭第四步


采用第二種方法,所有數據均正常導入,且格式轉換成功沒有亂碼


 


四:


mysql數據轉換編碼
[root@piglet home]# mysqldump -u root -p –default-character-set=latin1 –set-charset=utf8 –skip-opt aiyomama_cn > /home/sites/savemoney.sql
Enter password:


 


五:


下回來的是latin1亂碼的文件,因此,本機也架起Mysql5.0的環境
2. 然後新建一個空數據庫,編碼為UTF8,用下回來的sql文件導入
3. 再用phpmyadmin導出來,這樣編碼就成瞭UTF8
4. 把導出的sql文件中所有的DEFAULT CHARSET=latin1替換成DEFAULT CHARSET=utf8
5. 刪除原來的latin1編碼的數據庫,導入這個UTF8編碼的sql文件
完成:)


補充一下重點:
在執行完第2步的時候,用PHPMYADMIN打開數據庫看看
裡面所有的表和字段都還是LATIN1,沒關系,繼續執行第3步
執行完第3步,可以用文本編輯器打開SQL文件看看,換UTF8格式查看
這時,表和字段的內容就是UTF8瞭!


以上五種方法我都試驗瞭一遍,可能是數據庫實在太大,有的方法完全不行,有的可以但隻能轉換到一半也出錯停止,無法轉換完全部,最後在不懈努力之下找到個編碼轉換的PHP小腳本文件,使用後全部庫轉換正常,看來還是工具來的方便啊,手工忙瞭半天都沒解決。。。不過還有點就是不管遇到什麼問題,搜索引擎一般情況下都能幫助你解決問題,隻要你願意去花時間自己解決問題。


 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *