问题原因
-
字符集不兼容
MySQL默认的utf8
字符集(实际是utf8mb3
)仅支持最多3字节的字符,无法存储4字节的Emoji(如🤡)或其他特殊符号。 -
表或列的字符集配置错误
up_interact_enroll
表的reward_content
列可能使用了utf8
或latin1
字符集,导致插入失败。
解决方案
1. 修改表和列的字符集
将表及字段的字符集改为utf8mb4
,排序规则改为utf8mb4_unicode_ci
:
在mysql中执行sql
-- 修改表的默认字符集
ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 单独修改 table_name 列(可选)
ALTER TABLE table_name
MODIFY column_name TEXT
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
其他注意事项
- MySQL版本要求:需使用MySQL 5.5.3及以上版本(支持
utf8mb4
)。 - 数据迁移:若表中已有数据,建议备份后重新导入,避免编码转换错误。
- 客户端兼容性:确保应用程序代码和ORM框架(如MyBatis)的字符集配置一致。
扩展:为何选择utf8mb4?
- 支持完整Unicode:包括Emoji、生僻汉字等4字节字符。
- 兼容性更好:替代MySQL的旧版
utf8
(即utf8mb3
)。 - 未来兼容性:符合现代应用对国际化支持的需求。
通过上述步骤,可以彻底解决Incorrect string value
错误,确保数据库支持所有Unicode字符。