07
2018
02

mysql 数据库字符集的修改步骤

如果在应用开始阶段没有正确设置字符集,在运行一段时间后才发现存在不能满足需求要调整,又不想丢弃这段时间的数据,那么需要进行字符集的修改。字符集的修改不能直接通过“alter database charcter set ***” 或者 “alter table tablename character set ***”命令进行,这两个命令没有更新已有记录的字符集,而只对新创建的表或记录生效。已有记录的字符集调整,需要先导出数据,经过适当的调整重新导入后才能完成。
一下模拟的事将 latinl 字符集的数据库修改成 GBK 字符集的数据库的过程
  1、导出表结构:
    mysqldump -uroot -p --default-character-set=gbk -d databasename> createtab.sql
    其中 --default-character-set=gbk 表示设置以什么字符集链接, -d 表示只导出数据结构,不导出数据。
  2、手工修改 createtab.sql 中表结构定义中的字符集为新的字符集。
  3、确保记录不再更新,导出所有记录。
    mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latinl databasename> data.sql
    1) --quick: 该选项用于转存大的表。它强制 mysqldump 从服务器一次一次地检索表中的行而不是检索所有的行,并在输出前将它缓存到内存中。
    2)--extend-insert: 使用包括几个 values 列表的多行 insert 语法。这样使转存文件更小,重载文件时可以加速插入。
    3)--no-create-info: 不导出每个转存储表的 create table 语句。
    4) --default-character-set=latinl: 按照原有的字符集导出所有数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码。
  4、打开 data.sql , 将set names latinl 修改成 set names gbk.
  5、使用新的字符集创建数据库
    create database databasename default charset gbk
  6、穿件表,执行 createtab.sql 。
    mysql -uroot -p databasename < createtab.sql
  7、导入数据,执行 data.sql。
    mysql -uroot -p databasename < data.sql
  注意:选择目标字符集的时候,要注意最好是源字符集的超集,或者确定比源字符集的字库更大,否则如果目标字符集的字库小于源字符集字库,那么目标字符集中不支持的字符导入后会变成乱码,丢失一部分数据。例如,GBK 字符集的字库大于 GB 2312 字符集,那么 gbk 字符集的数据,如果导入 gb 2312 数据库中,就会丢失 gb 2312 中不支持的那部分汉字的数据。

« 上一篇 下一篇 »

评论列表:

1.qihui  2018-02-07 14:50:30 回复该评论
1、墨刀https://modao.cc/
2、https://www.mockplus.cn/
2.程序员爱好者  2018-03-04 17:22:16 回复该评论
看得眼睛酸

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。