我似乎无法在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>
我仍然无法解释发生了什么,我很高兴让它工作。如果有人想重现错误,我很乐意提供帮助。