Express执行SQL报ER_PARSE_ERROR但MySQL Workbench运行正常如何解决
问题原因
你的报错核心是 order 属于MySQL的保留关键字,直接作为表名使用时,MySQL会将其解析为语法关键字而非表名,因此触发1064语法错误。
你在MySQL Workbench中添加数据库名前缀后可正常执行的原因是:加上库名.前缀后,MySQL会明确识别后续的标识符为表名,不会再当做保留关键字处理。
解决方案
你可以任选以下两种方案解决问题:
- 方案1:修改SQL语句,用反引号包裹表名
order,避免关键字解析冲突,修改后的INSERT语句如下:
注意包裹const newOrder = "INSERT INTO `order` (order_id,order_date,customer_id,duration_from,duration_to,machine_id,total_rent,invoice_number,status) VALUES(?,?,?,?,?,?,?,?,?);";order的是反引号(键盘ESC键下方的字符),不是单引号或双引号。 - 方案2:长远来看更推荐将表名修改为非保留关键字的名称,比如
orders,从根源避免后续同类问题出现。
你已经在创建连接池时指定了database: "user_database"参数,不需要额外在SQL里拼接数据库名前缀,修改表名的引用方式即可正常执行。
内容的提问来源于stack exchange,提问作者Rajeev Bhat
相关产品推荐
相关产品推荐

