Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 强制液化为当前_时间戳,而不是现在()_Mysql_Timestamp_Liquibase_Liquibase Hibernate_Liquibase Sql - Fatal编程技术网

Mysql 强制液化为当前_时间戳,而不是现在()

Mysql 强制液化为当前_时间戳,而不是现在(),mysql,timestamp,liquibase,liquibase-hibernate,liquibase-sql,Mysql,Timestamp,Liquibase,Liquibase Hibernate,Liquibase Sql,在MySQL中使用liquibase核心:3.6.3。 这是我第一次必须为列使用时间戳(3),而不是默认时间戳。由于我的时间戳列不可为空,如果未设置默认值,则添加当前的_时间戳(直接在MySQL中或使用liquibase) 我面临的问题不是liquibase生成的SQL不使用当前的_TIMESTAMP,而是NOW()作为要调用的默认函数。这使得时间戳(3)不可能 有没有办法强制liquibase在输出中使用当前的_时间戳而不是现在() 输出:创建表db\u name.TABLE\u name(i

在MySQL中使用liquibase核心:3.6.3。

这是我第一次必须为列使用时间戳(3),而不是默认时间戳。由于我的时间戳列不可为空,如果未设置默认值,则添加当前的_时间戳(直接在MySQL中或使用liquibase)

我面临的问题不是liquibase生成的SQL不使用当前的_TIMESTAMP,而是NOW()作为要调用的默认函数。这使得时间戳(3)不可能

有没有办法强制liquibase在输出中使用当前的_时间戳而不是现在()

输出:
创建表db\u name.TABLE\u name(id INT unsigned NOT NULL,updated timestamp DEFAULT NOW()NOT NULL,CONSTRAINT PK\u RULE\u STATE主键(id))

这个很好用。但是,将时间戳更改为时间戳(3)

输出:
创建表db\u name.TABLE\u name(id INT unsigned NOT NULL,updated timestamp(3)DEFAULT NOW()NOT NULL,CONSTRAINT PK\u RULE\u STATE PRIMARY KEY(id))其中NOW()不是有效值

使用
defaultValueDate

如果我使用
defaultValue:current_timestamp()
liquibase足够聪明,可以在不使用文本字符串的情况下将其检测为函数,但是,这仍然是timestamp(3)的无效值。最后,使用

- changeSet:
          id: xxx
          author: xxx
          changes:
            - createTable:
                tableName: table_name
                columns:
                  - column:
                      name: id
                      type: int unsigned
                      autoIncrement: false
                      constraints:
                        primaryKey: true
                  - column:
                      name: updated
                      type: timestamp(3)
                      defaultValue: current_timestamp(3)
                      constraints:
                        nullable: false
生成输出:

CREATE TABLE db_name.TABLE_name(id INT unsigned NOT NULL,updated timestamp(3)缺省值'current_timestamp(3)'NOT NULL,CONSTRAINT PK_RULE_STATE主键(id))

我最后的机会是根本不设置默认值。除了MySQL在更新当前时间戳(3)
时添加了
,我无法避免它之外,这一切都很好



那么,有没有办法强制使用当前时间戳(3)或作为备份计划,以防止MySQL在更新时生成
部分?

如果查看liquibase repositoy中的数据库配置,您会发现确实
NOW()
被设置为MySQL的
CurrentDateTimeFunction

public MySQLDatabase() {
    super.setCurrentDateTimeFunction("NOW()");
    ...
}
因此,强制当前_时间戳(3)的一种方法是基于MySQLDatabase
使用自定义的
liquibase.database.database
实现:

public class CustomMySQLDatabase extends MySQLDatabase {

    public CustomMySQLDatabase() {
        super();
        super.setCurrentDateTimeFunction("CURRENT_TIMESTAMP(3)");
    }
    ...

之后,您可以在调用liquibase时使用
CustomMySQLDatabase
as--databaseClass参数。

您可以使用
modifySql
命令和
replace
选项将自动生成的
NOW()
替换为
当前的\u时间戳(3)
(或者你需要的任何东西)

从文档中:

…有时,生成的SQL需要与您的特定需要略有不同

有关更多详细信息,请参见此处:

如中所述,您可以使用value
NOW(3)
作为
defaultValueComputed
,如以下示例所示:


然后,结果如下所示:

mysql> SHOW COLUMNS FROM myTable;
+-----------+---------------+------+-----+----------------------+-------------------+
| Field     | Type          | Null | Key | Default              | Extra             |
+-----------+---------------+------+-----+----------------------+-------------------+
| DateTime  | timestamp(3)  | NO   |     | CURRENT_TIMESTAMP(3) | DEFAULT_GENERATED |
+-----------+---------------+------+-----+----------------------+-------------------+
mysql> SHOW COLUMNS FROM myTable;
+-----------+---------------+------+-----+----------------------+-------------------+
| Field     | Type          | Null | Key | Default              | Extra             |
+-----------+---------------+------+-----+----------------------+-------------------+
| DateTime  | timestamp(3)  | NO   |     | CURRENT_TIMESTAMP(3) | DEFAULT_GENERATED |
+-----------+---------------+------+-----+----------------------+-------------------+