MySQL执行INSERT查询时报1064语法错误但仍执行,求排查解析
排查MySQL 1064语法错误及“报错却仍执行”的问题
先来说说那个1064语法错误——你的INSERT INTO eier_borettslag(bsID, eierID) VALUES(1, 1);语句看起来字面完全没问题,那大概率是不可见字符在搞鬼:
- 你是不是从其他地方(比如Word文档、网页、聊天记录)复制的这条语句?很多时候复制粘贴会带入全角空格、隐藏的控制字符(比如奇怪的换行符、制表符),这些字符肉眼看不见,但MySQL解析时会把它们当成语法的一部分,所以触发了1064错误。
- 也有可能是你在输入时不小心加了多余的符号(比如语句末尾多了个奇怪的乱码字符),刚好卡在了报错提示的“第1行附近”位置。
接下来解释最困惑的点:为什么报错了语句还被执行?
MySQL的SQL解析器有一定的“容错”逻辑:
- 如果错误出现在语句的非核心位置(比如语句末尾的多余字符),解析器在报错前已经完成了INSERT的核心逻辑(找到了表、字段,插入了值),所以数据已经被写入,之后才抛出语法错误。
- 另一种可能是你用的客户端(比如phpMyAdmin、Navicat)开启了“部分执行”的功能——如果你的输入里混了其他无效内容,但INSERT本身是完整正确的,客户端会优先执行有效的部分,再报错提示无效的内容。
解决建议
- 别复制粘贴了,手动重新敲一遍整个INSERT语句,确保所有字符都是英文半角的(包括括号、分号、逗号)。
- 可以用这个SQL来检查语句里的异常字符:把你的语句放到单引号里执行
SELECT HEX('INSERT INTO eier_borettslag(bsID, eierID) VALUES(1, 1);');,正常情况下所有字符的十六进制编码都是常规的(比如空格是20,分号是3B,字母数字是对应ASCII码),如果出现奇怪的编码,那就是那个字符导致的错误。 - 检查你的数据库客户端设置,看看是不是开启了“自动执行部分语句”之类的选项,关掉它避免后续出现类似问题。
内容的提问来源于stack exchange,提问作者Nystuen
相关产品推荐
相关产品推荐

