MySQL 数据库插入表情包异常
1. 出现问题
- 数据库迁移到阿里云 MySQL 数据库期间,emjol 表情包插表失败,日志抛出 SQLException 异常
2. 分析过程
- 首先预估这时配置数据库时,字符集配置成了 utf8,它是不能存储表情包等超过 3 个字节的字符,需要修改为 utf8mb4 才是正常的 UTF-8
- 查看阿里云数据库与表配置,发现设置的都是 utf8mb4,因此可能还有其他地方设置的是 utf8
- 搜索 MySQL 官方文档,发现配置有这些:
- 字段、表编码方式
- character_set_client:客户端请求字符集
- character_set_connection:建立连接字符集
- character_set_database:数据库字符集
- character_set_server:数据库服务器字符集
- character_set_results:服务器结果集字符集
- 通过跳板机连接数据库
- 输入
SHOW FULL COLUMNS FROM 表名
查看字段字符集 - 输入
SHOW CREATE TABLE 表名
查看表字符集 - 输入
SHOW SESSION VARIABLES LIKE 'character\_set\_%';
查询数据库字符集
- 输入
3. 解决方案
- 通过 Navicat 直接连跳板机去写 SQL 插入数据库
- 在线上实际测试了一把,发现修改 character_set_server 为 utf8mb4 即可