Liquibase:如何将日期列的默认值设置为UTC格式的"now"?

12 浏览
0 Comments

Liquibase:如何将日期列的默认值设置为UTC格式的"now"?

如何将日期列的默认值设置为UTC格式的“now”?我认为答案涉及到column element上的defaultValueComputed属性。\n文档中指出:\n

\ndefaultValueComputed:从函数或过程调用返回的值。该属性将包含要调用的函数。\n

\n所指的函数应该使用哪种语言编写?Java?函数应该是我想要使用的特定于数据库供应商的日期函数吗?有关此主题还有其他可以阅读的文档吗?

0
0 Comments

问题的原因是在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列的问题。

0
0 Comments

Liquibase是一个用于数据库版本控制和迁移的开源工具。在使用Liquibase时,有时需要设置日期列的默认值为当前时间。问题是如何以UTC格式设置日期列的默认值为"now"。

解决方法是在Liquibase的XML配置文件中使用元素来设置默认值。根据不同的数据库系统,可以使用不同的属性值来表示当前时间。例如,对于MySQL和H2数据库,可以使用"value=now()"来表示当前时间;对于PostgreSQL数据库,可以使用"value=current_timestamp"表示;对于Oracle数据库,可以使用"value=sysdate"表示;对于MSSQL数据库,可以使用"value=getdate()"表示。

以下是一个示例的代码片段,演示了如何在Liquibase中设置日期列的默认值为"now":






    
        
            
        
    

通过设置不同数据库系统的属性值,可以在Liquibase中将日期列的默认值设置为当前时间。这样,在数据库迁移过程中,无论在哪个数据库系统中运行,都可以正确地设置日期列的默认值为"now"。

0
0 Comments

问题的出现原因是想要使用Liquibase设置日期列的默认值为"now"的UTC格式。解决方法是使用defaultValueComputed属性,并传入数据库特定的函数来表示"now"。对于MySQL来说,可以使用CURRENT_TIMESTAMP函数来表示。在MySQL中,可以使用以下代码来实现:


    

在Oracle中,可以使用以下代码来实现:


    

需要注意的是,这只会将默认值设置为CURRENT_TIMESTAMP,并不会在更新时改变值(例如last_updated_at字段)为CURRENT_TIMESTAMP。在MySQL和MariaDB中,这两种行为相同。

0