Liquibase - 将 defaultValueComputed 添加为 CURRENT_TIMESTAMP 到时间戳列
Liquibase - Add defaultValueComputed as CURRENT_TIMESTAMP to timestamp column
我在 MySql 5.5 上使用 liquibase 3.5.3 到 运行 liquibase update
命令。我在 changeSet
下面创建一个 table,其中有一列为 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()
,这可能会导致此问题。
有人可以为我提供解决此问题的任何解决方案或替代方案吗?
将类型添加为 'TIMESTAMP' 如下
<column defaultValueComputed="CURRENT_TIMESTAMP" name="Created_Time" type="TIMESTAMP"/>
这是一个奇怪的场景,由 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>
我在 MySql 5.5 上使用 liquibase 3.5.3 到 运行 liquibase update
命令。我在 changeSet
下面创建一个 table,其中有一列为 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()
,这可能会导致此问题。
有人可以为我提供解决此问题的任何解决方案或替代方案吗?
将类型添加为 'TIMESTAMP' 如下
<column defaultValueComputed="CURRENT_TIMESTAMP" name="Created_Time" type="TIMESTAMP"/>
这是一个奇怪的场景,由 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>