出现SQLSTATE[HY000]: General error: 1366 Incorrect string value
错误是由于MySQL无法处理字符串中的4字节Unicode字符(如Emoji表情),需从以下方面解决:
调整数据库字符集
将数据库、表及字段的字符集和排序规则改为utf8mb4
:
sqlCopy CodeALTER DATABASE 数据库名 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE 表名 MODIFY data VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
修改MySQL配置文件
在my.cnf
或my.ini
中添加以下配置,并重启MySQL服务:
iniCopy Code[client]default-character-set = utf8mb4[mysqld]character-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect = 'SET NAMES utf8mb4'
验证字符集
执行SHOW VARIABLES LIKE 'character_set%';
,确保所有相关变量值为utf8mb4
设置连接字符集
在数据库连接字符串中明确指定字符集(如JDBC添加useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8mb4_unicode_ci
)
过滤非法字符
若无法修改数据库,可在插入前过滤4字节字符(PHP示例):
phpCopy Code$data = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $data);
此方法会移除Emoji等特殊字符
MySQL版本要求:确保MySQL版本≥5.5.3(支持utf8mb4)
字段长度限制:utf8mb4字符可能占用更多存储空间,需调整字段长度
排序规则一致性:所有关联表、字段需使用相同排序规则(如utf8mb4_unicode_ci
)
如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~