背景:某個系統的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; 注意:千萬不要忘了第四步 採用第二種方法,全部數據均正常導入,且格式轉換成功沒有亂碼