问题描述

当向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.
  1. MySQL版本必须高于 5.5.3,低于这个版本,不支持utf8mb4
  2. 下面客户端修改编码方法,针对的是MySQL 5.0+, 可能不适用于8.0版本,选择适合自己的方案
  3. 也可以选择数据库管理工具自行修改

客户端修改编码

修改数据库的编码格式

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项目编译不过。

参考