【问题标题】:MariaDB Bug with TIMESTAMP, CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP带有 TIMESTAMP、CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 的 MariaDB 错误
【发布时间】:2017-04-26 11:26:42
【问题描述】:

在 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. 要使用当前时间戳更新的修改日期时间。

我做了一个插入,这是我得到的值:

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

我原以为这些值是一样的,为什么现在不一样了?

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

  • 我的 Spring 服务器使用 UTC 时间。
  • 玛丽亚数据库:

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

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

我使用mariadb:10.1.17官方docker镜像,没有对镜像做任何修改。

这是我的插入语句:

==>  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,但我仍然有同样的错误。

【问题讨论】:

  • 如果日期不同,那是因为我在代码中留下了 creationDateTime = new DateTime();这意味着服务器 DateTime 使用我的本地时区,而 sql 使用不同的时区

标签: mysql database datetime timezone mariadb


【解决方案1】:

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

这意味着服务器使用 DateTime() 创建日期时间和数据库 UTC。

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 2016-05-30
    • 2011-09-29
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2011-07-31
    • 2012-01-01
    相关资源
    最近更新 更多