带有TIMESTAMP,CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP的MariaDB错误

时间:2016-12-11 13:17:42

标签: mysql database datetime timezone mariadb

  

在MariaDB 5.5和之前,每个只能有一个TIMESTAMP列   将CURRENT_TIMESTAMP定义为其默认值的表。这个   自MariaDB 10.0以来,不再应用限制。

来源:https://mariadb.com/kb/en/mariadb/timestamp/

我有下表:

CREATE TABLE oauth_client_details (
  client_id VARCHAR(255) PRIMARY KEY,
  resource_ids VARCHAR(255),
  client_secret VARCHAR(255),
  scope VARCHAR(255),
  authorized_grant_types VARCHAR(255),
  web_server_redirect_uri VARCHAR(255),
  authorities VARCHAR(255),
  access_token_validity INTEGER,
  refresh_token_validity INTEGER,
  additional_information VARCHAR(4096),
  autoapprove VARCHAR(255),
  version bigint(20) UNSIGNED DEFAULT '1',
  creation_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  modification_datetime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  active tinyint(1) UNSIGNED DEFAULT '1'
);

我需要

  1. 要在插入时填充当前时间戳的创建日期时间
  2. 要使用更新时的当前时间戳更新的修改日期时间。
  3. 我做了一个插入,这是我得到的值:

    • creation_datetime:' 2016-12-11 20:03:24'
    • modification_datetime:' 2016-12-11 13 :03:24'

    我期待这些值是相同的,那为什么它现在不同呢?

    我想只存储UTC时间并将其转换为用户区域设置 在最后一刻。

    • 我的Spring服务器使用UTC时间。
    • MariaDB:

      SELECT @@global.time_zone, @@global.system_time_zone;
      |SYSTEM|UTC
      

    我国现在20:03,所以我认为错误的值是modification_datetime字段。

    我使用mariadb:10.1.17官方泊坞窗图片而不对图像进行任何修改。

    这是我的插入声明:

    ==>  Preparing: insert into oauth_client_details(client_id,authorized_grant_types,access_token_validity,additional_information,active,client_secret,creation_datetime,autoapprove,modification_datetime,resource_ids,web_server_redirect_uri,authorities,refresh_token_validity,scope,version) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) 
    ==> Parameters: bo(String), authorization_code,refresh_token(String), 1800(Integer), {"companyId":1,"companyName":"testing"}(String), true(Boolean), $2a$10$h/0tc3qnZj/ZfRrNXf.oiuypEyYXJAJZdHPgy2ZMc1XMAntAMPK(String), null, true(Boolean), null, testinggroup/api(String), http://localhost:8080,http://dev:31735(String), ROLE_CLIENT(String), 3600(Integer), read,write,trust(String), 1(Long)
    

    有没有人有这个?

    编辑:我已将我的docker Mariadb从版本10.1.17更新为最新版本的10.1.19,但我仍然遇到相同的错误。

1 个答案:

答案 0 :(得分:0)

看起来日期不同,因为我在模型中留下了代码creationDateTime = new DateTime();

这意味着服务器正在使用DateTime()来创建createDateTime和数据库UTC。