原因分析
在MySQL 5.5.3之前版本的数据库中,数据库的默认编码是utf8字符集,只支持1-3个字节的字符,也就是只能保存1到3个字节。但现在的emoji表情需要用4个字节才能保存,所以抛出异常。
解决方案
1、将数据表的编码格式设置成utf8mb4_general_ci
sql
ALTER TABLE XXX CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
此时数据库已经可以支持emoji表情了
2、修改JDBC链接
sql
修改前
jdbc.url=jdbc:mysql:/域名:端口/数据库?useUnicode=true&character_set_server=utf-8
修改后
jdbc.url=jdbc:mysql:/域名:端口/数据库?useUnicode=true&character_set_server=utf8mb4
最后修改druid数据源的配置,增加一行。
bash
<property name="connectionInitSqls" value="set names utf8mb4;"/>