背景:某個系統的mysql資料庫dnname採用預設的latin1字元集,系統升級需要將所有資料轉換成utf-8格式,目標資料庫為newdbname(建庫時使用utf8)

方法一:

步驟一 命令列執行: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;

注意:千萬不要忘了第四步

採用第二種方法,所有資料均正常導入,且格式轉換成功沒有亂碼。

來自:http://blog.csdn.net/guoguo1980/article/details/2070701

 

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

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

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料