问题描述
当向mysql插入数据中含有emoji表情时,会插入失败。
问题原因
mysql中编码方式选择了utf-8,一个字符最多支持3个字节,但是emoji是四个字节,所以插入失败。
解决方案
将mysql编码格式设置为utf8mb4,可以支持四个字节
The utfmb4 character set has these characteristics:
- Supports BMP and supplementary characters.
- Requires a maximum of four bytes per multibyte character.
- MySQL版本必须高于 5.5.3,低于这个版本,不支持utf8mb4
- 下面客户端修改编码方法,针对的是MySQL 5.0+, 可能不适用于8.0版本,选择适合自己的方案
- 也可以选择数据库管理工具自行修改
客户端修改编码
修改数据库的编码格式
1 | ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; |
修改数据表的编码格式
1 | ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
修改数据列的编码格式
1 | ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
Spring Boot 修改数据库连接配置
光修改MySQL服务端还不够,一般还要修改项目中数据库连接配置。
我这里用的连接池是druid,其它可以自己类推,加上下面配置即可。
1 | spring.datasource.druid.connection-init-sqls=set\u0020names\u0020utf8mb4 |
\u0020
是空格的意思,如果直接写成set names utf8mb4
项目编译不过。