【发布时间】: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'
);
我需要:
- 插入时用当前时间戳填充的创建日期时间
- 要使用当前时间戳更新的修改日期时间。
我做了一个插入,这是我得到的值:
- 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