MySQL 修改数据库字符集
587 字
3 分钟
MySQL 修改数据库字符集
Unicode 与 UTF-8
Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式(其他实现方式还有 UTF-16, UTF-32)。
MySQL 字符集 collation
collation定义了哪个字符和哪个字符是“等价”的。所以如果指定“不区分大小写”,那么a和A,e和E就是等价的,这样查找时就会方便很多。但这还不够,世界上的文字很多,所以才会有“不区分音调”的要求,这时候e、ē、é、ě、è就是等价的,那么假设我们要进行拼音查找,只要按e去找就可以全部列出来,很方便。甚至,它们也和ê、ë也是等价的,这样就更方便了。
collation也定义了字符的排序规则,如果按照“字符顺序(而不是简单的‘字母顺序’)”来排序,哪个字符应当排在哪个字符前面。所以,尽管“啊”、“副”、“德”三个字的拼音开头分别为A、F、D,但直接选定collation为utf8mb4,它们并不会按照“啊”、“德”、“副”的顺序排序,而是会排成“副”、“啊”、“德”。如果你希望把中文字符按照拼音(英文字母)来排序,指定使用gb18030_chinese_ci作为collation就可以了。
团队初期不注意 mysql 字符集和字符集 **collation **问题,导致部分业务场景出现不可预料的问题,可以用以下脚本,自动生成修改语句,然后进行更新。
SQL 脚本
- 修改 schema 的默认字符集
-- 通过 infomation_schema 自动批量生成修改 schema 默认字符集和collation语句-- ALTER DATABASE `table_schema_name` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;SELECT SCHEMA_NAME, concat( 'ALTER DATABASE `', SCHEMA_NAME, '` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' )FROM `information_schema`.`SCHEMATA`WHERE DEFAULT_COLLATION_NAME != 'utf8mb4_general_ci'- 转换表的字符集
-- 通过 infomation_schema 自动批量生成修改表字符集和collation语句-- ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;SELECT TABLE_SCHEMA, concat( 'ALTER TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci, ALGORITHM = COPY;' )FROM `information_schema`.`TABLES`WHERE TABLE_COLLATION != 'utf8mb4_general_ci' AND TABLE_SCHEMA = 'table_schema_name'ORDER BY TABLE_SCHEMA📎 参考文章
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
MySQL 批量修改日期格式
技术分享通过 infomation_schema 生成批量修改语句
2
MySQL 数据类型字节长度
技术分享介绍 MySQL 各种数据类型的存储需求。数值类型:DECIMAL/NUMERIC 采用二进制格式,每 9 位十进制数占用 4 字节。日期时间类型:MySQL 5.6.4 前后存储方式不同,DATETIME 从 8 字节优化到 5 字节,TIME/DATETIME/TIMESTAMP 支持 0-3 字节的小数秒精度存储。
3
MySQL 备份恢复
技术分享MySQL 数据库备份恢复方案。包含 mysqldump、xtrabackup 等工具备份策略、恢复流程、注意事项。
4
MySQL中的锁
技术分享2024-03-31
5
MySQL的MVCC
技术分享MySQL MVCC 多版本并发控制原理。包含 Read View、Undo Log、快照读/当前读等核心概念。
随机文章随机推荐













