MySQL Workbench执行INSERT查询返回1064错误的原因定位
MySQL 1064语法错误根因定位
你的报错是多个问题叠加导致的,没有单一触发点:
- 列清单和值数量严重不匹配(红色波浪线的直接诱因)
你写在INSERT语句里的列列表仅包含9个字段:
但VALUES子句后足足跟了22个值。你自己备注sameDayService, delivery, pickUpFee, dryCleaningPrices1-14, addInfo, sameDayInfo, deliveryHours, pickUpHours, EstablishmentBusinessNamedryCleaningPrices1-14是14个独立字段的简化写法,却完全没把这14个真实字段补到列清单里——MySQL根本不知道多出来的13个值对应哪个字段,读到值列表末尾时就会抛出“当前位置无效,预期应为右括号')'”的提示,和你观察到的Workbench报错表现完全一致。 - 带连字符的列名未做转义处理
你的表结构中存在列名dryCleaningPrices1-14,名称本身包含减号。按照MySQL语法规则,不加反引号包裹的列名会被解析器识别为“dryCleaningPrices1 减去 14”的算术表达式,根本不会被当成合法列名处理,必然触发语法错误。
同样的问题也出现在你的Sequelize模型代码中:JS对象字面量里的dryCleaningPrices1-14本身是非法键名,会被JS引擎解析为“dryCleaningPrices1的值减去14”,运行时直接报未定义变量错误,完全无法正确映射到数据库字段。 - SQL文本混入不可见特殊字符
你贴出的查询语句中,多个"kill"字符串前面藏了Unicode零宽字符(复制粘贴时带入的隐形字符),这类字符在MySQL词法分析阶段无法被识别,也会中断解析流程触发报错。 - 列清单漏匹配表内字段
对照你给出的表DDL,你的INSERT列清单漏掉了freePickUp、deliveryOrderMinimum、addInfo2、addInfo3四个字段,就算值的数量对齐了,如果需要给这些字段传值,也必须明确写入列清单,不能靠位置盲目匹配。
修正操作指引
- 所有带特殊字符(连字符、空格、SQL保留字)的列名,统一用反引号包裹,例如
`dryCleaningPrices1-14` - 绝对不要用简写占位符代替真实列名,严格让列清单的字段数量和VALUES的值数量一一对应
- 把SQL文本粘贴到纯文本编辑器中,清除所有不可见的零宽、特殊控制字符
- Sequelize模型中带连字符的字段名,要么改成合法的驼峰命名(同步调整表结构列名),要么给键名加双引号变成合法JS字符串,例如
"dryCleaningPrices1-14": { type: DataTypes.STRING }
补充提醒:你表上配置了外键关联,插入时的
EstablishmentBusinessName值必须能匹配到establishments表中已存在的businessName记录,否则会抛外键约束错误——这类错误不属于1064语法错误范畴。
内容的提问来源于stack exchange,提问作者Anthony M
相关产品推荐
相关产品推荐

