时区在数据库中是错误的

问题描述 投票:1回答:1

我在phpmyadmin中使用CURRENT_TIMESTAMP函数创建了一个日期。并且小时的输出值错误1小时。我尝试使用SET TIME_ZONE = '+01:00';在mysql中更改它

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

mysql datetime timezone zoneinfo
1个回答
0
投票

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

当表的列具有TIMESTAMP数据类型时,在从当前time_zone设置转换为UTC之后,所有值都以UTC格式存储。当您从这些列中检索值时,它们会被转换回您当前的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 database,由IANA维护。许多Linux发行版都包含对常规更新中zoneinfo数据库的更改。

© www.soinside.com 2019 - 2024. All rights reserved.