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