背景
生产环境插入数据报错:
java.sql.SQLException: Incorrect string value: '\xF0\xAC\xB1\x96' for column 'answer' at row 1
设置answer字段值为 “𬱖”出现错误
生僻字设置出错;
排查
编码
查看库表属性:
ENGINE InnoDB AUTO_INCREMENT =1479001 DEFAULT CHARSET utf8 ROW_FORMAT DYNAMIO
utf8
总而言之,utf-8 只支持 3 个字节的字符;
如果是超过 4 个字节,那么就需要使用 utf8mb4 (max byte 4 ):加强版的 utf8 来存储
生僻字
查看生僻字占用的字节:
4 字节,显然 utf8 是不满足的
解决
提交 sql:
alter table qt_check_answer default CHARACTER SET utf8mb4
alt 之后还是报错;
查看库表:
表级别的设置更新了,但是字段还没有更新;
复现一下:
结论
此时更新字段级别的编码类型:解决
结论:MySQL编码存在字段级别的设置,生僻字需要字段级别的编码支持