Liquibase modifyDataType在Mysql上失败



我似乎无法在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之前添加/删除默认值,但没有成功。

当您使用不可为空的 liquibase 修改列的类型时......您必须首先使其可为空,然后使用安全修改对其进行修改

事实证明,在名为 create_time 的字段上进行完全相同的修改,放置在之前,并没有引起任何问题。交换两个长集顺序确实解决了问题。

<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>

我仍然无法解释发生了什么,我很高兴让它工作。如果有人想重现错误,我很乐意提供帮助。

相关内容

  • 没有找到相关文章

最新更新