上一篇
场景还原:
凌晨3点,你正喝着第5杯咖啡赶项目,突然后台疯狂弹窗——"ERROR 1366 (HY000): Incorrect string value..." 😱 数据死活插不进数据库,而老板的夺命连环call还有30秒到达战场...别慌!这份「1366错误求生指南」能让你5分钟内绝地反击!
MySQL的1366错误本质是编码冲突,就像让一个只懂中文的人强行读俄文电报📠,常见触发场景:
latin1
但数据是utf8mb4
-- 查看当前编码(重点关注character_set开头的变量) SHOW VARIABLES LIKE '%char%'; -- 修改数据库/表/字段编码为utf8mb4(兼容所有Unicode字符,包括emoji) ALTER DATABASE 数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4;
💡 注意:已有数据需用
mysqldump
导出再导入,直接ALTER可能不彻底
-- 当前会话临时改用utf8mb4 SET NAMES utf8mb4; -- 插入数据测试 INSERT INTO 表名 VALUES ('🍉西瓜表情测试');
-- 单独修改问题字段的编码 ALTER TABLE 表名 MODIFY 字段名 VARCHAR(255) CHARACTER SET utf8mb4;
在MySQL配置文件(my.cnf/my.ini)中添加:
[client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
重启MySQL服务生效 🔄
# Python示例:入库前先转义 import pymysql data = "特殊字符🔥".encode('unicode_escape').decode() # 输出:'\\u7279\\u6b8a\\u5b57\\u7b26\\U0001f525'
utf8
是阉割版(最长3字节),真实名称应写作utf8mb4
utf8mb4_general_ci
(快但粗略) vs utf8mb4_unicode_ci
(准但稍慢) ?charset=utf8mb4
如果错误已导致数据乱码:
HEX()
函数检查原始存储内容 SELECT 字段名, HEX(字段名) FROM 表名 WHERE id=问题ID;
根据2025年MySQL 8.3更新:
SHOW CHARACTER SET LIKE '%utf%'
快速检测可用编码 latin1
改为utf8mb4
(终于!) 本文由 杨昕靓 于2025-08-01发表在【云服务器提供商】,文中图片由(杨昕靓)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/508328.html
发表评论