轉換Mysql資料編碼的兩種方法

來源:互聯網
上載者:User

背景:某個系統的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
總結:這種方法有個致命之處就是當資料中有大量中文字元和其他特殊符號字元時,很有可能導致在[步驟五]時報錯導致無法正常匯入資料,如果資料庫比較大可以分別對每張表執行上述步驟

方法二:

為瞭解決第一種方法中總結時說到的問題,在網上苦苦尋找了一天資料才東拼西湊的搞出一個比較穩妥的解決方案
步驟一 將待匯出的資料表的表結構匯出,然後將匯出的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;
注意:千萬不要忘了第四步
採用第二種方法,所有資料均正常匯入,且格式轉換成功沒有亂碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.