SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\xA6\x99\xEF\xBC...' for column 'data' at row 1  mysql 保存记录报错怎么处理?

疑难杂症   2025-03-28 14:43   120   0  

出现SQLSTATE[HY000]: General error: 1366 Incorrect string value错误是由于MySQL无法处理字符串中的4字节Unicode字符(如Emoji表情),需从以下方面解决:

一、修改数据库编码为utf8mb4

  1. 调整数据库字符集
    将数据库、表及字段的字符集和排序规则改为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;
  2. 修改MySQL配置文件
    my.cnfmy.ini中添加以下配置,并重启MySQL服务:

    iniCopy Code[client]default-character-set = utf8mb4[mysqld]character-set-server = utf8mb4collation-server = utf8mb4_unicode_ciinit_connect = 'SET NAMES utf8mb4'
  3. 验证字符集
    执行SHOW VARIABLES LIKE 'character_set%';,确保所有相关变量值为utf8mb4

二、检查应用程序配置

  1. 设置连接字符集
    在数据库连接字符串中明确指定字符集(如JDBC添加useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8mb4_unicode_ci)‌

  2. 过滤非法字符
    若无法修改数据库,可在插入前过滤4字节字符(PHP示例):

    phpCopy Code$data = preg_replace('/[\x{10000}-\x{10FFFF}]/u', '', $data);

    此方法会移除Emoji等特殊字符‌

三、其他注意事项

  • MySQL版本要求‌:确保MySQL版本≥5.5.3(支持utf8mb4)‌

  • 字段长度限制‌:utf8mb4字符可能占用更多存储空间,需调整字段长度‌

  • 排序规则一致性‌:所有关联表、字段需使用相同排序规则(如utf8mb4_unicode_ci)‌


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。
闲言碎语
我们都史无前例的有默契,突然你不理我我也不理你。
赞赏支持

如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~