我似乎无法在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
之前添加/删除默认值,但未成功。
答案 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>
我仍无法解释发生的事情,我很高兴让它发挥作用。如果有人想重现错误,我很乐意提供帮助。