问题描述
公司的APP项目中输入Emoji表情和火星文等特殊字符时,后台接口存入数据库报错,错误信息如下:
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1
问题分析
- 问题是移动端的emoji表情为四个字节,而MySQL的utf8编码方式的数据为三个字节。将MySQL的utf8编码改为utf8mb4编码方式就可以进行存储了。
- 这里需要注意是MySQL必须是5.5.3以上版本,我们使用的是5.6版本所以没有问题可以改。
解决过程
本文主要参考了阿里云官方帮助文档《RDS MySQL使用utf8mb4字符集存储emoji表情》
1、查看数据库是否支持utf8mb4
在数据库client终端查看数据库是否支持utf8mb4编码方式
SHOW CHAR SET WHERE Charset LIKE "%utf8%";
2、修改参数
在RDS控制台-参数配置功能中修改character_set_server参数为utf