軟件測試 | MySQL字符集的修改步驟
如果在應(yīng)用開始階段沒有正確的設(shè)置字符集,在運(yùn)行一段時(shí)間以后才發(fā)現(xiàn)存在不能滿足要求需要調(diào)整,又不想丟棄這段時(shí)間的數(shù)據(jù),那么就需要進(jìn)行字符集的修改。字符集的修改不能直接通過“alter database character set ***”或者“alter table tablename character set ***”命令進(jìn)行,這兩個(gè)命令都沒有更新已有記錄的字符集,而只是對新創(chuàng)建的表或者記錄生效。已有記錄的字符集調(diào)整,需要先將數(shù)據(jù)導(dǎo)出,經(jīng)過適當(dāng)?shù)恼{(diào)整重新導(dǎo)入后才可完成。 以下模擬的是將 latin1 字符集的數(shù)據(jù)庫修改成 GBK 字符集的數(shù)據(jù)庫的過程。
(1)導(dǎo)出表結(jié)構(gòu):
其中--default-character-set=gbk 表示設(shè)置以什么字符集連接,-d 表示只導(dǎo)出表結(jié)構(gòu),
不導(dǎo)出數(shù)據(jù)。
(2)手工修改 createtab.sql 中表結(jié)構(gòu)定義中的字符集為新的字符集。
(3)確保記錄不再更新,導(dǎo)出所有記錄。
--quick:該選項(xiàng)用于轉(zhuǎn)儲大的表。它強(qiáng)制 mysqldump 從服務(wù)器一次一行地檢索表中的行而不是檢索所有行,并在輸出前將它緩存到內(nèi)存中。
--extended-insert:使用包括幾個(gè) VALUES 列表的多行 INSERT 語法。這樣使轉(zhuǎn)儲文件更小,重載文件時(shí)可以加速插入。
--no-create-info:不寫重新創(chuàng)建每個(gè)轉(zhuǎn)儲表的 CREATE TABLE 語句。
--default-character-set=latin1:按照原有的字符集導(dǎo)出所有數(shù)據(jù),這樣導(dǎo)出的文件中,所有中文都是可見的,不會保存成亂碼。
(4)打開 data.sql,將 SET NAMES latin1 修改成 SET NAMES gbk。
(5)使用新的字符集創(chuàng)建新的數(shù)據(jù)庫。
(6)創(chuàng)建表,執(zhí)行 createtab.sql。
(7)導(dǎo)入數(shù)據(jù),執(zhí)行 data.sql。
注意:選擇目標(biāo)字符集的時(shí)候,要注意最好是源字符集的超級,或者確定比源字符集的字庫更大,否則如果目標(biāo)字符集的字庫小于源字符集的字庫,那么目標(biāo)字符集中不支持的字符倒入后會變成亂碼,丟失一部分?jǐn)?shù)據(jù)。例如,GBK 字符集的字庫大于 GB2312 字符集,那么 GBK 字符集的數(shù)據(jù),如果導(dǎo)入 GB2312 數(shù)據(jù)庫中,就會丟失 GB2312 中不支持的那部分漢字的數(shù)據(jù)。