今天在处理数据的时候出现这个错误
Incorrect string value: '\xF0\xA5\x8C\x93\xE5\x85...' for column 'nickName' at row 126; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\xA5\x8C\x93\xE5\x85...' for column 'nickName' at row 126
在网上搜了几个答案,告知的原因是UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而MySQL的utf8编码最多3个字节,所以数据插不进去。
解决方案:将编码从utf8转换成utf8mb4。
这里一定要注意这个细节,我在解决的时候就出现了这个问题,自己也没注意到:就是在设置表的字符集后同时也要设置对应插入列的字符集
具体修改的sql如下所示:
Alter table `my_test`.`t_user_info`
charset=utf8mb4
Alter table `my_test`.`t_user_info`
change `nickName` `nickName` varchar(32) CHARSET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '昵称'
如果问题还未解决,保证参数设置如下所示,我的mysql配置信息这样问题就解决了。
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
确保这个配置项:character-set-server=utf8mb4