数据库中的时区错误
Timezone is wrong in database
我已经使用 phpmyadmin 中的 CURRENT_TIMESTAMP 函数进行了约会。小时的输出值错了1小时。我尝试在 mysql 中使用
SET TIME_ZONE = '+01:00';
但是它仍然会提前 1 小时提交日期。有什么建议吗?
您涉及到一个复杂的话题。
当 table 的列具有 TIMESTAMP
数据类型时,所有值都存储在 UTC after 从您当前的 time_zone
设置为 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, are maintained by IANA。许多 Linux 发行版在其定期更新中包含对 zoneinfo 数据库的更改。
我已经使用 phpmyadmin 中的 CURRENT_TIMESTAMP 函数进行了约会。小时的输出值错了1小时。我尝试在 mysql 中使用
SET TIME_ZONE = '+01:00';
但是它仍然会提前 1 小时提交日期。有什么建议吗?
您涉及到一个复杂的话题。
当 table 的列具有 TIMESTAMP
数据类型时,所有值都存储在 UTC after 从您当前的 time_zone
设置为 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, are maintained by IANA。许多 Linux 发行版在其定期更新中包含对 zoneinfo 数据库的更改。