什么是我的服务器本地时区设置
每个服务器都有一个默认的全局 time_zone 设置,由服务器计算机的所有者配置。你可以通过以下方式设置当前时区:
SELECT @@time_zone
不幸的是,这通常会产生值 SYSTEM
,这意味着 MySQL 时间由服务器操作系统的时区设置决定。
这一系列的查询(是的,它是一个黑客攻击 )可以为你提供服务器时区设置和 UTC 之间的分钟偏移量。
CREATE TEMPORARY TABLE times (dt DATETIME, ts TIMESTAMP);
SET time_zone = 'UTC';
INSERT INTO times VALUES(NOW(), NOW());
SET time_zone = 'SYSTEM';
SELECT dt, ts, TIMESTAMPDIFF(MINUTE, dt, ts)offset FROM times;
DROP TEMPORARY TABLE times;
这是如何运作的?临时表中具有不同数据类型的两列是线索。DATETIME
数据类型始终以本地时间存储在表中,TIMESTAMP
s 以 UTC 格式存储。因此,当 time_zone 设置为 UTC 时执行的 INSERT
语句存储两个相同的日期/时间值。
然后,当 time_zone 设置为服务器本地时间时,将完成 SELECT 语句。TIMESTAMP
s 总是从它们存储的 UTC 表单转换为 SELECT 语句中的本地时间。DATETIME
s 不是。因此, TIMESTAMPDIFF(MINUTE...)
操作计算本地时间和世界时间之间的差异。