背景
在保存微信客户昵称的时候数据库遇到如下错误,原因在于UTF-8编码有可能是两个、三个、四个字节。Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。
Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB7' for column 'nickname' at row 1
解决方案
修改nickname的编码格式,没必要修改整个表。这种方式也不需要重启数据库,修改完即生效
ALTER TABLE bis_visitor_info MODIFY `nickname` VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
代码解释
ALTER TABLE 表名 MODIFY `列名` '字段类型及长度' CHARACTER SET '编码格式' COLLATE '排序及比较方式';
查看每一列的编码
SHOW FULL COLUMNS FROM 表名;