【问题标题】:Getting "Invalid default value" when upgrading Liquibase from 3.2 to 3.3将 Liquibase 从 3.2 升级到 3.3 时出现“无效的默认值”
【发布时间】:2018-06-26 18:58:07
【问题描述】:

我正在使用 LIquibase 3.2 并正在尝试升级到 3.3,而我正在使用 MySql 5.5。但是,以下类型的更改集升级失败...

<changeSet author="me" id="my_changeset">
    <addColumn tableName="my_table">
        <column name="STUFF_VISIBLE" type="BOOLEAN" defaultValueNumeric="0">
            <constraints nullable="false"/>
        </column>
    </addColumn>
</changeSet>

错误提示失败

Error: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Invalid default value for 'STUFF_VISIBLE'

有什么方法可以解决问题而无需重新调整所有校验和?在我的 Liquibase 更改集中,这些类型的语句多次出现。

【问题讨论】:

    标签: mysql liquibase default-value changeset


    【解决方案1】:

    对于这样的每个实例,您可以将validChecksums 属性添加到列出更改之前和更改之后的更改集的校验和的变更集中。

    【讨论】:

    • 好的,谢谢。如果新的校验和出现在有效校验和列表中,这将阻止校验和再次运行?
    • Liquibase 总是为即将应用到数据库的每个变更集计算校验和。它将计算出的校验和与 DATABASECHANGELOG 表中与要应用的变更集具有相同 [changesetid, author, path] 的行进行比较,如果校验和不同,则引发异常。如果计算出的校验和列在 validChecksum 属性中,这也被认为是可接受的,并且可以应用变更集。
    【解决方案2】:

    AFAIK 失败的变更集不应写入数据库中的 DATABASECHANGELOG 表,因此如果您更改此特定变更集,则无需重新计算校验和。 此外,您始终可以尝试回滚特定的变更集或简单地打开提到的 DATABASECHANGELOG 表并手动更新其中的确切记录(例如,删除有关应用变更集的信息 :)) 顺便说一句:你为​​什么使用 defaultValueNumeric 而不是 defaultValueBoolean?

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2018-01-29
      • 1970-01-01
      • 2018-12-14
      相关资源
      最近更新 更多