在Mysql上Liquibase modifyDataType失败

时间:2016-01-25 06:16:01

标签: mysql liquibase

我似乎无法在Mysql 5.7.10实例上执行类型修改(但它适用于H2)。

以下是关注字段所涉及的变更集步骤:

创建:

<column name="last_modify_time" type="bigint">
    <constraints nullable="false" />
</column>

修饰:

<modifyDataType tableName="USER" columnName="last_modify_time" newDataType="timestamp" />

Mysql中的错误信息是

Invalid default value for 'last_modify_time' [Failed SQL: ALTER TABLE USER MODIFY last_modify_time timestamp]

将请求手动修改为以下作品:

ALTER TABLE USER MODIFY last_modify_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP

我真的不明白为什么Mysql需要默认值。也许它是版本5.7.10的边缘情况(使用默认配置选项)。 无论如何,Liquibase应该能够处理它。

我已尝试在modifyDataType之前添加/删除默认值,但未成功。

2 个答案:

答案 0 :(得分:0)

当你使用不可为空的liquibase修改列的类型时...你必须首先使它可以为空,然后使用安全修改修改它

答案 1 :(得分:0)

事实证明,在之前放置的名为create_time的字段上完全相同的修改不会导致任何问题。交换两个changsets命令确实解决了这个问题。

<changeSet id="11" author="author">
    <comment>rename last_modify_time to last_modified_date and change type to timestamp</comment>
    <modifyDataType tableName="USER" columnName="last_modify_time" newDataType="timestamp" />
    <renameColumn tableName="USER" oldColumnName="last_modify_time" newColumnName="last_modified_date" columnDataType="timestamp" />
</changeSet>
<changeSet id="12" author="author">
    <comment>rename create_time to created_date and change type to timestamp</comment>
    <modifyDataType tableName="USER" columnName="create_time" newDataType="timestamp" />
    <renameColumn tableName="USER" oldColumnName="create_time" newColumnName="created_date" columnDataType="timestamp"/>
</changeSet>

我仍无法解释发生的事情,我很高兴让它发挥作用。如果有人想重现错误,我很乐意提供帮助。