check the manual that corresponds to your MySQL server version for the right syntax to use near

最近一个上线的功能在生产环境使用会报错,但是在开发环境使用没有问题。
在这里插入图片描述

执行SQL的时候报错,根据查阅其他文章得出几种主要原因:

  1. 关键字冲突。检查某些地方比如表字段是否误用了关键字。
  2. SQL是否有中文字符 、是否含特殊字符、是否正确分行。检查SQL是不是用错了语法或者写多或缺了什么字母。
  3. 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。

posted @ 2021-06-18 15:44  →_→BéLieve  阅读(85)  评论(0)    收藏  举报  来源