首先明确一点:MySQL的utf8并不是真的utf8,因为MySQL的utf8是3个字节进行编码的,而表情符号需要4个字节进行编码
出现的场景
最近在使用MySQL的时候遇到一个坑,在存储表情符号到数据库的时候发现和预想的不一样,一直在排查问题,到后期一直怀疑是自己的sql语句有问题,但最后发现不是因为sql语句的问题,而是字符编码方式不正确导致的。
解决方案
使用utf8mb4
因为utf8mb4能够支持Unicode标准中的所有字符,包括所有新的表情符号
具体步骤
最重要的一点。先备份数据库。别问为什么,问就是血与泪的教训
第一种:使用可视化工具,我以navicat为例
对数据库的修改:
1.打开Navicat,连接到你的MySQL服务器
2.在左侧的数据库列表中,右键点击你想要修改的数据库
3.选择“编辑数据库”或者“数据库属性”,取决于你的Navicat版本
4.找到字符集(Character Set)和排序规则(Collation)的选项
5.将字符集改为utf8mb4
6.点击确定保存更改
对表的修改:
1.展开左侧的数据库结构,找到需要修改的表格
2.右键点击表格,选择“设计表”或者“编辑表结构”
3.在表格结构的设计视图中,通常在底部或者是一个单独的标签页中,可以找到字符集的选项
4.将字符集设置为utf8mb4
5.点击确定保存更改
第二种:使用SQL命令
对数据库的修改:
ALTER DATABASE your_database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
对表的修改:
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
总结
千万别被MySQL的utf8骗了,这只是表象,老实的使用utf8mb4