工作时,如果遇到乱码、或是业务扩展需要支持更多字符、或是系统迁移和升级,我们不可避免地遇到修改数据库字符集的需要。该这么进行修改呢? 前面我们在《如何对默认字符集和校对规则进行修改?》已经很清楚地说了,ALTER DATABASE 或 ALTER TABLE 命令对已经存在的数据没有作用,只对新创建的表或记录生效。如果想修改已存在数据的字符集,需要先将数据导出,经过适当的调整后,再重新导入。

那么解决问题的方法就很清晰了,导出数据-修改字符集-导入数据;

举个例子:

在数据库dotcpp下面有张dotcpp_user表格,我们先看看dotcpp数据库的默认字符集是什么:

USE dotcpp;
SHOW CREATE DATABASE dotcpp;

查看dotcpp数据库下的默认字符集

看表知道,默认字符集(default cahracter set)是utf8mb4,校对规则是utf8mb4_0900_ai_ci(ci-不区分大小写 ai-不区分重音)。

现在要将dotcpp中的表dotcpp_user换个字符集,暂且换成gbk吧(注意utf8mb4兼容性远胜于gbk

1. 开始导出数据(通过mysqldump实现),CMD输入(注意这里是需要通过原字符集解码才能导出文件):

mysqldump -u Dotcpp -p --default-character-set=utf8mb4 dotcpp dotcpp_user>C:\Users\dotcpp\Desktop\DotcppProgramming\dotcpp_changed.sql

这是我们在路劲下会生成一个dotcpp_changed.sql的文件:

成功导出的dotcpp_user用户表

2.记事本打开该sql文件并进行修改:

找到CREATE TABLE语句:

成功找到修改位置

改:

CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

为:

DEFAULT CHARSET=gbk COLLATE=gbk_chinese_ci;

保存即可!

3.导入数据:

创建一个新的数据库,姑且叫test并在创建时定义字符集为gbk;

CREATE DATABASE test
CHARACTER SET gbk
COLLATE gbk_chinese_ci;

CMD输入:

mysql -u Dotcpp -p --default-character-set=gbk test < C:\Users\dotcpp\Desktop\DotcppProgramming\dotcpp_changed.sql

解释:

 --default-character-set=gbk (设置导入字符集)

test < (使用test数据库)

然后切换数据库并查看表的字符集:

USE test;
SHOW CREATE TABLE dotcpp_user \G;

得到:

完成gnk字符集的修改

可以看到字符集已经是gbk了。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)