工作时,如果遇到乱码、或是业务扩展需要支持更多字符、或是系统迁移和升级,我们不可避免地遇到修改数据库字符集的需要。该这么进行修改呢? 前面我们在《如何对默认字符集和校对规则进行修改?》已经很清楚地说了,ALTER DATABASE 或 ALTER TABLE 命令对已经存在的数据没有作用,只对新创建的表或记录生效。如果想修改已存在数据的字符集,需要先将数据导出,经过适当的调整后,再重新导入。
那么解决问题的方法就很清晰了,导出数据-修改字符集-导入数据;
举个例子:
在数据库dotcpp下面有张dotcpp_user表格,我们先看看dotcpp数据库的默认字符集是什么:
USE dotcpp; SHOW CREATE DATABASE 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的文件:
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;
得到:
可以看到字符集已经是gbk了。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程