check the manual that corresponds to your MySQL server version for the right syntax to use near
最近一个上线的功能在生产环境使用会报错,但是在开发环境使用没有问题。
执行SQL的时候报错,根据查阅其他文章得出几种主要原因:
- 关键字冲突。检查某些地方比如表字段是否误用了关键字。
- SQL是否有中文字符 、是否含特殊字符、是否正确分行。检查SQL是不是用错了语法或者写多或缺了什么字母。
- Navicat premium工具转储数据表的结构,时间后面都会带“(0)”,把datetime(0)全替换成datetime或time(0)
我这里报错都不是上面的情况,最后发现是MySQL版本不同对一些动态SQL标签不兼容导致。
开发环境MySQL版本
生产环境MySQL版本
执行的SQL
<update id="updateFormulaBomList" parameterType="FormulaBom">
<foreach item="item" collection="list" index="index" separator=";">
update formula_bom set actual_price = #{ item.actualPrice } where formula_bom_id = #{ item.formulaBomId }
</foreach>
</update>
这里本来传入参数为集合然后一次执行多条SQL,如报错图所示。但是foreach标签在8.0使用会出错,就换成单条执行的SQL了(去掉foreach修改下参数等即可),在后端循环update。