2

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

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

4

1 回答 1

1

你正在触及一个复杂的话题。

当表的列具有TIMESTAMP数据类型时,所有值在从当前设置转换为 UTC后都以 UTC 存储。time_zone当您从这些列中检索值时,它们将转换回您当前的time_zone. time_zone这很方便,因为您可以通过将视为用户首选项,在他们自己的本地时间向全球用户呈现日期戳。

当列具有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,您将自动受益于您选择的区域设置的夏令时规则。这些规则称为zoneinfo 数据库,由IANA维护。许多 Linux 发行版在其定期更新中包含对 zoneinfo 数据库的更改。

于 2019-03-06T14:06:29.860 回答