华为云云数据库rds更新emoji表情数据报错Error 1366_云淘科技

场景描述

业务插入或更新带有emoji表情的数据时,报错Error 1366。

java.sql.SQLException: Incorrect string value: '🐰å¤...' for column 'username' at row 1 ;
uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366];  
Incorrect string value: '🐰å¤...' for column 'username' at row 1; 

原因分析

RDS for MySQL的字符集配置有误:

emoji表情为特殊字符,需要4字节字符集存储。
该报错场景下MySQL字符集为utf-8,最多支持3个字节,需要修改为支持4个字节的字符集utf8mb4。

解决方案

将存储emoji表情的字段的字符集修改为utf8mb4。

如果涉及的表和字段比较多,建议把对应表、数据库的编码也设置为utf8mb4。参考命令:

ALTER DATABASE database_name CHARACTER SET= utf8mb4 COLLATE= utf8mb4_unicode_ci;

ALTERTABLE table_name CONVERTTOCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ALTERTABLE table_name MODIFY 字段名 VARCHAR(128) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;

若对应字段的字符集已经是utf8mb4,则为客户端或MySQL服务端字符集转换问题,将客户端和MySQL服务端的字符集都设置为utf8mb4。

父主题: SQL类

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家