前言
今天在设计开源项目的反馈信息表时遇到了emoji表情插入失败的问题,网上找了很多解决方案,答案五花八门,没找到好使的。
经过一番折腾后,终于成功插入了emoji表情,本文就跟大家分享下我的实现过程,欢迎各位感兴趣的开发者阅读本文。
写在前面
我的服务器是Mac系统,mysql使用brew安装的,windows/linux它的配置文件位置可能有些不一样,具体根据真实情况而定。
先跟大家看下它的报错信息:
chat_system> UPDATE chat_system.feedback t SET t.comments = '反馈信息测试😂' WHERE t.id = 1
[2020-12-01 21:36:08] [HY000][1366] Incorrect string value: '\xF0\x9F\x98\x82' for column 'comments' at row 1
[2020-12-01 21:36:08] [HY000][1366] Incorrect string value: '\xF0\x9F\x98\x82' for column 'comments' at row 1复制

实现思路
因为数据库默认是UTF-8
编码格式,普通的字符串占位3个字节而表情占位4字节,此时UTF-8就不够用了,需要采用utf8mb4
字符集就能解决这个问题了。
注意:utf8mb4字符集要求数据库版本高于5.5.3。
那么,我们要做的事情如下所示:
修改mysql配置文件,设置其编码格式 修改数据库字符集编码 修改数据库表字符集编码
实现过程
mysql默认读取配置的顺序为:/etc/my.cnf
、/etc/mysql/my.cnf
、/usr/local/etc/my.cnf
、~/.my.cnf
,如果对应目录下不存在这些配置文件,则需要自己新建一个。
修改数据库配置文件 my.cnf
,我的文件位置在:/usr/local/etc
下,添加下述代码
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
character-set-client-handshake = false
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4复制
修改数据库字符集编码,登录mysql后执行下述sql语句。
# 设置数据库字符集编码,chat_system为数据库名称,根据自己的实际情况而来
ALTER DATABASE chat_system CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;复制
修改数据库表的字符集编码,登录mysql后执行下述sql语句。
# 设置数据库表字符集编码,chat_system.feedback_comment_reply为我的数据库下对应的表名称,根据自己的实际情况而来
ALTER TABLE chat_system.feedback_comment_reply CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;复制
完成上述操作后,我们来看看是否修改成功,登录mysql后执行下述sql语句。
SHOW VARIABLES WHERE Variable_name LIKE 'character%' OR Variable_name LIKE 'collation%';
复制
显示下属信息,则表示我们已经修改完成了。

测试用例
我们来往插入一个emoji表情来测试下:
UPDATE chat_system.feedback t SET t.comments = '反馈信息测试😂' WHERE t.id = 1;
复制
如下所示,没有报错,插入成功。

我们用dataGrap
查看下数据库表中的数据,如下所示,它显示了一个?
,应该是软件无法识别。

讲道理,应该是插入成功了,我们用postman请求接口试下,成功显示出来了😄。

文章转载自神奇的程序员k,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1296次阅读
2025-03-13 11:40:53
MySQL8.0统计信息总结
闫建(Rock Yan)
485次阅读
2025-03-17 16:04:03
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
458次阅读
2025-03-13 14:38:19
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
454次阅读
2025-03-04 21:56:13
SQL优化 - explain查看SQL执行计划(一)
金同学
388次阅读
2025-03-13 16:04:22
MySQL突然崩溃?教你用gdb解剖core文件,快速锁定“元凶”!
szrsu
349次阅读
2025-03-13 00:29:43
MySQL生产实战优化(利用Index skip scan优化性能提升257倍)
chengang
327次阅读
2025-03-17 10:36:40
MySQL数据库当前和历史事务分析
听见风的声音
265次阅读
2025-04-01 08:47:17
一键装库脚本3分钟极速部署,传统耗时砍掉95%!
IT邦德
237次阅读
2025-03-10 07:58:44
MySQL8.0直方图功能简介
Rock Yan
229次阅读
2025-03-21 15:30:53