【问题标题】:Liquibase gives MySQL Syntax Error where phpMyAdmin doesn'tLiquibase 给出了 phpMyAdmin 没有的 MySQL 语法错误
【发布时间】:2015-04-22 09:25:43
【问题描述】:

我想在启动时使用 liquibase 3.2.2 和 MySQL 5.6.23 在 tomcat 7 服务器上执行命令。

命令失败,第 2 行出现神秘的语法错误。

当我在 phpMyAdmin GUI 中执行相同的命令时,它可以正常工作。

这是命令:

UPDATE `mytable`
SET `parametervalue`='<div class="div_w5 col_fg_head font_bold font_size_nor padding_t4 h_right">
    <input type="radio" id="zahlung_ja" name="zahlung" value="1">
</div>
<div class="div_w5 font_bold font_size_nor padding_t4">
    &nbsp;ja &nbsp;&nbsp;
</div>
<div class="div_w5 col_fg_head font_bold font_size_nor padding_t4 h_right">
    <input type="radio" id="zahlung_nein" name="zahlung" value="0">
</div>
<div class="div_w10 font_bold font_size_nor padding_t4">
    &nbsp;nein &nbsp;&nbsp;
</div>'
WHERE ID=23;

注意:当我将多行字符串压缩为更少的行时,它也适用于 liquibase。但这并不能解决我的一般问题,因为这里显示的字符串只是我无法透露的几个较长字符串的精简示例。

【问题讨论】:

  • 你是在&lt;sql&gt;标签内运行这个吗?
  • @Jens 不,我使用的是SQL format
  • 好的。有一个参数--splitStatements,您可以设置false(默认为true)。实际上,它应该只在; 上拆分,因此它应该适用于您的示例,但也许您可以尝试一下并将其设置为false,看看是否有任何改变。
  • @Jens 感谢您的提示,splitStatements 可以解决问题。显然,即使语句出现在多行字符串中,它们也用分号分隔。我想这符合 liquibase 中的错误(或至少应该记录的内容)。
  • 我想通过; 拆分sql语句是一种标准的做法。所以我怀疑它会被归类为错误。而且我不知道如何安全地将 sql 语句中的; 与真正的; 区分开来。不过,您可以使用 --endDelimiter 指定不同的分隔符。

标签: mysql phpmyadmin tomcat7 liquibase


【解决方案1】:

解决方案是在变更集标头中添加参数splitStatements:false

问题是一个带引号的多行字符串中的分号,MySQL 将其解释为字符串的一部分。

但是 liquibase 忽略了 SQL 语法,所以它在分号处拆分命令,这导致发送到 MySQL 的命令不完整。

注意:Jens 在对该问题的评论中指出了这一点。

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多