MySQL字符集,永恒的痛
本文转载自微信公众号「虞大胆的叽叽喳喳」,作者虞大胆。转载本文请联系虞大胆的叽叽喳喳公众号。
最近迁移mysql和升级mysql版本,遇到了很多乱码(主要是表情问题)问题,所以记录下。
mysql字符集分别支持四种级别的字符集和对应的比较规则,比如服务器级别的是character_set_server,数据库级别的是character_set_database,表级别和列级别也可以设置字符集,比如:
- create database test CHARSET set utf8mb4 COLLATE utf8_general_ci
另外字符集比较也要遵循规则,比较常用的比较规则是utf8_general_ci。
一般服务器启动的时候配置:
- [mysqld]
- character_set_server = utf8mb4
在安装和创建库表的时候,尽量使用utf8mb4字符集。
对于客户端(比如程序驱动、mysql工具集)有三个和字符集有关的系统变量,分别是character_set_client,character_set_connection,character_set_results,用于客户端编码解码,并和数据库交互。
这三个参数其实通过default-character-set或set names一次性指定。
具体遇到的问题分别是:
1:mysql导入导出的指定default-character-set为utf8mb4,或者会出现乱码。
2:服务器级别的字符集配置为utf8mb4,库、表、列即使不指定,也会继承服务器级别的配置。
3;mysql工具集,尽量显示指定—default-character-set字符集,比如:
- [client]
- default-character-set=utf8mb4
- [mysql]
- default-character-set=utf8mb4
4:如果有proxy,一定要在proxy上指定字符集
5:如果不知道有没有问题,通过phpmyadmin查看和修改,尤其查看其具体执行的mysql语句。
6:编译的时候指定字符集,比如:
- cmake -DDEFAULT_CHARSET=utf8mb4 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8mb4_general_ci
参考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html
相关文章
- 数据孤岛是业务效率的无声杀手
- 2023展望:新的一年将给大数据分析领域带来什么?
- 阿里云ADB基于Hudi构建Lakehouse的实践
- 大数据在医疗保健领域的使用案例
- 微软增加说明:KB5021751 更新扫描已经 / 即将过时 Office 过程中不会触碰用户隐私
- 2022 Gartner全球云数据库管理系统魔力象限发布 腾讯云数据库入选
- 场景化、重实操,分享一个实时数仓实践案例
- Arctic的湖仓一体践行之路
- 分布式计算MapReduce究竟是怎么一回事?
- 淘系数据模型治理优秀实践
- 大数据分析对医疗保健的影响
- 当我们说大数据Hadoop,究竟在说什么?
- 2022年及以后大数据的五个发展趋势
- 网易严选离线数仓治理实践
- 2023 年数据治理趋势
- 一份“靠谱”的年度经营计划,你学会了吗?
- 漫谈对大数据的思考
- 测试一下,读懂数据的能力,你有吗?
- 用艺术的眼光探索数据之美
- 聊聊数据分析成果如何落地