我正在使用liquibase 3.5.3在MySql 5.5上运行liquibase update
命令。我在changeSet
下面创建了一个表格,其列为Created_Time
,其默认值应为CURRENT_TIMESTAMP
。
<changeSet author="authorName" id="AutoGeneratedId">
<createTable tableName="aTable">
<column autoIncrement="true" name="Id" type="INT">
<constraints primaryKey="true"/>
</column>
<column name="Code" type="VARCHAR(45)"/>
<column defaultValueComputed="CURRENT_TIMESTAMP" name="Created_Time" type="TIMESTAMP(19)"/>
</createTable>
</changeSet>
在触发liquibase命令时,它会抛出异常
Unexpected error running Liquibase: Invalid default value for 'Created_Time' [Failed SQL: CREATE TABLE aTable (Id INT AUTO_INCREMENT NOT NULL, Code VARCHAR(45) NULL, Created_Time TIMESTAMP(19) DEFAULT NOW() NULL, CONSTRAINT PK_ATABLE PRIMARY KEY (Id))]
Liquibase正在将CURRENT_TIMESTAMP
转换为可能导致此问题的NOW()
。
有些人可以向我提供这个问题的任何解决方案或替代方案吗?
答案 0 :(得分:3)
将类型添加为“TIMESTAMP”,如下所示
<column defaultValueComputed="CURRENT_TIMESTAMP" name="Created_Time" type="TIMESTAMP"/>
答案 1 :(得分:1)
这是一种奇怪的情况,原因是liquibase如何处理DateTime defaultValueComputed
或defaultValueDate
。
简而言之,以current_timestamp
开头的任何东西或目标引擎上用于获取当前时间戳的默认函数都将通过默认函数调用替换 *整个字符串* ,而忽略其他任何内容你放。
我们最终得到了这样的东西:
<column name="created_at" type="datetime"
defaultValueComputed="NOW()">
<constraints nullable="false" />
</column>
<column name="updated_at" type="datetime"
defaultValueComputed="NOW() ON UPDATE NOW()">
<constraints nullable="false" />
</column>