已用數(shù)據(jù)表的Mysql字符集修改
Mysql字符集修改應該如何實現(xiàn)呢?下面就為您詳細介紹已用數(shù)據(jù)表的Mysql字符集修改方法,希望對您學習Mysql字符集方面能有所啟迪。
環(huán)境:在應用開始階段沒有正確的設置字符集,在運行一段時間以后才發(fā)現(xiàn)存在不能滿足需求需要調(diào)整,又不想丟棄這段時間的數(shù)據(jù),那么就需要進行字符集的修改。字符集的修改不能直接通過"alter database character set *** " 或者 "alter table tablename character set *** "命令進行,這兩個命令都沒有更新已有記錄的字符集,而只是對新創(chuàng)建的表或者記錄生效。
那么已有記錄的字符集調(diào)整,需要怎么操作呢?
以下模擬的是將latin1字符集的數(shù)據(jù)庫修改成GBK字符集的數(shù)據(jù)庫的過程:
(1) 導出表結(jié)構(gòu)
mysqldump -uroot -p --default-character-set=gbk -d databasesename > createdb.sql
其中--default-character-set=gbk表示設置以什么字符集連接,-d表示只導出表結(jié)構(gòu),不導出數(shù)據(jù)
(2) 手工修改createdb.sql中表結(jié)構(gòu)定義中的字符集為新的字符集
(3) 確保記錄不再更新,導出所有記錄
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename > data.sql
--quick:該選項用于轉(zhuǎn)儲大的表。它強制Mysqldump從服務器一次一行的檢索表中的行,而不是檢索所有的行,兵輸出前將它緩存在內(nèi)存中
--extended-insert:使用包括幾個values列表的多行Insert語法,這樣使轉(zhuǎn)儲文件更小,重載文件更快
--no-create-info:不屑重新創(chuàng)建每個轉(zhuǎn)儲表的create table語句
--default-character-set=latin1:按照原有的字符集導出所有數(shù)據(jù),這樣導出的文件中,所有中文都是可見的,不會保存成亂碼
(4) 打開data.sql,將SET NAMES latin1 修改成SET NAMES gbk
(5) 使用新的字符集創(chuàng)建新的數(shù)據(jù)庫
create database newdatabasename default charset gbk;
(6) 創(chuàng)建表,執(zhí)行createdb.sql
mysql -uroot -p newdatabasesname < createdb.sql
(7) 導入數(shù)據(jù),執(zhí)行data.sql
mysql -uroot -p newdatabasename < data.sql
【編輯推薦】