数据库中的时区错误

时间:2019-03-06 13:37:23

标签: mysql datetime timezone zoneinfo

我已经用phpmyadmin中的CURRENT_TIMESTAMP函数进行了约会。并且小时的输出值错误了1小时。我已经尝试过使用 SET TIME_ZONE = '+01:00';

但是它仍会在1小时之前提交日期。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您正在处理一个复杂的话题。

当表的列具有time_zone数据类型时,所有值都将存储在UTC中,在 之后从当前的time_zone设置转换为UTC。当您从这些列中检索值时,它们将转换回当前的DATETIME。这很方便,因为您可以将CREATE TABLE t1 ( ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); SET time_zone = 'UTC'; INSERT INTO t1 (ts, dt) VALUES (NOW(), NOW()); SET time_zone = 'Europe/Paris'; INSERT INTO t1 (ts, dt) VALUES (NOW(), NOW()); SET time_zone = 'UTC'; SELECT * FROM t1; /* notice differences presentation of ts columns, ds stay the same */ SET time_zone = 'Europe/Paris'; SELECT * FROM t1; /* again */ SET time_zone = 'America/Halifax'; SELECT * FROM t1; /* again */ 视为用户首选项,从而在全球范围内向本地用户显示日期戳。

当列的数据类型为Europe/Paris时,不会发生翻译

这是一个例子:

{{1}}

专业提示::如果您使用命名时区{{1}},您将自动从所选区域设置的夏令时规则中受益。由zoneinfo database维护称为IANA的规则。许多Linux发行版在其定期更新中包括对zoneinfo数据库的更改。