mysql插入emoji表情报 error code [1366]

问题:

今天再插入一条数据的时候,突然报错。

Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xB0\xE5\xA4...' for column 'username' at row 1 ; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x90\xB0\xE5\xA4...' for column 'username' at row 1;

经过排查发现是因为username的值是带有emoji表情的,像这样:🐰夏大大🐰。

原因:

原因是mysql的字符集设置有误。虽然是utf-8,但并不是真正的utf-8,他最多支持3个字节。而utf8mb4才是支持4个字节的编码方式。

解决方案

解决方案就是讲相应的字段编码改成utf8mb4,为了避免空间浪费,只改动需要存储emoji的字段即可

1、修改mysql配置文件/etc/my.cnf 。修改为。character-set-server = utf8mb4


my.cnf文件

2、使用命令行或者可视化工具修改字段编码方式



修改配置文件需要重启生效。至此数据库便支持emoji。