如何以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)
(从论坛帖子复制.)
小智 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)
在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)进行读取。