Liquibase:如何将日期列的默认值设置为UTC格式的"now"?
Liquibase:如何将日期列的默认值设置为UTC格式的"now"?
如何将日期列的默认值设置为UTC格式的“now”?我认为答案涉及到column element上的defaultValueComputed
属性。\n文档中指出:\n
\ndefaultValueComputed:从函数或过程调用返回的值。该属性将包含要调用的函数。\n
\n所指的函数应该使用哪种语言编写?Java?函数应该是我想要使用的特定于数据库供应商的日期函数吗?有关此主题还有其他可以阅读的文档吗?
问题的原因是在MySQL中,如果想要使用带有毫秒精度的DATETIME列,可以使用DATETIME(6)
,并将默认值设置为NOW(6)
。然而,使用CURRENT_TIMESTAMP(6)
可能会导致liquibase 3.5.3出错。
解决方法是在liquibase的changelog文件中使用以下代码来设置默认值为当前时间(带有毫秒精度)的DATETIME列:
<column name="created_at" type="DATETIME(6)" defaultValueComputed="NOW(6)" > <constraints nullable="false" /> </column>
需要注意的是,该值在内部以UTC格式存储,但是根据服务器的时区设置(@.time_zone
,@.time_zone
)读取。
这样就解决了在liquibase中设置默认值为当前时间(以UTC格式)的DATETIME列的问题。
Liquibase是一个用于数据库版本控制和迁移的开源工具。在使用Liquibase时,有时需要设置日期列的默认值为当前时间。问题是如何以UTC格式设置日期列的默认值为"now"。
解决方法是在Liquibase的XML配置文件中使用
以下是一个示例的代码片段,演示了如何在Liquibase中设置日期列的默认值为"now":
通过设置不同数据库系统的属性值,可以在Liquibase中将日期列的默认值设置为当前时间。这样,在数据库迁移过程中,无论在哪个数据库系统中运行,都可以正确地设置日期列的默认值为"now"。