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

Jef*_*eff 28 sql liquibase

如何以UTC格式将日期列的默认值设置为"now"?我认为答案涉及列元素defaultValueComputed属性.

文件说明:

defaultValueComputed从函数或过程调用返回的值.该属性将包含要调用的函数.

langauge是指应该写入的函数?Java的?该函数应该是我想要使用的数据库供应商特定的日期函数吗?我可以阅读有关此主题的更多文档吗?

Jen*_*ens 28

也许liquibase论坛中的这个主题会有帮助吗?

我认为defaultValueComputed将采用数据库特定功能来表达"现在".在mySQL中它会是CURRENT_TIMESTAMP这样的:

<createTable tableName="D_UserSession">
    <column name="ts" type="TIMESTAMP" defaultValueComputed="CURRENT_TIMESTAMP"/>
</createTable>
Run Code Online (Sandbox Code Playgroud)

(从论坛帖子复制.)

  • `defaultValueComputed="to_timestamp('2015-02-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')"` 也适用于 Oracle (2认同)

小智 17

这应该是:

<property name="now" value="now()" dbms="mysql,h2"/>
<property name="now" value="current_timestamp" dbms="postgresql"/>
<property name="now" value="sysdate" dbms="oracle"/>
<property name="now" value="getdate()" dbms="mssql"/>

<changeSet author="me" id="sample_usage_demo">
    <addColumn schemaName= "dbo" tableName="demo_table" >
        <column name="demo_column" type="datetime" defaultValueDate="${now}">
            <constraints nullable="false" />
        </column>
    </addColumn>
</changeSet>
Run Code Online (Sandbox Code Playgroud)


Pav*_* S. 5

在MySQL中,要将DATETIME列与秒的小数部分(如DATETIME(6)微秒精度)一起使用,请使用默认值NOW(6)(警告:CURRENT_TIMESTAMP(6)由于某种原因,使用liquibase 3.5.3会对我产生错误):

<column name="created_at" type="DATETIME(6)" defaultValueComputed="NOW(6)" >
   <constraints nullable="false" />
</column>
Run Code Online (Sandbox Code Playgroud)

请注意,该值将内部存储在UTC中,但使用服务器的时区设置(@@global.time_zone@@session.time_zone)进行读取。