2010-10-12 55 views
0

我有两台位于英国的Linux/MySQL服务器,在两个报告BST(GMT + 1)上都有当前系统时区,但我发现MySQL的输出有一定的差异。MySQL UTC_TIMESTAMP()忽略当前的@@ time_zone设置

下面的查询:

SELECT version(), @@time_zone, @@system_time_zone, NOW(), UTC_TIMESTAMP() 

回报:

Server A: 5.0.27-community-nt | SYSTEM | GMT | 2010-10-12 12:17:01 | 2010-10-12 11:17:01 
Server B: 5.0.45-log | SYSTEM | GMT Daylight Time | 2010-10-12 12:17:51 | 2010-10-12 11:17:51 

因此,服务器A报告它设置为GMT。服务器进程在格林威治标准时间3月1日开始生效,所以我期待这一点。但是,UTC_TIMESTAMP()已正确(但意外)报告UTC在本地时间之前1小时。

在服务器B上,MySQL进程在夏季开始,因此它正确报告GMT夏令时,并在一小时前再次正确报告UTC。

我的问题是,服务器A如何得到“正确”的答案?而且,10月31日当地时间恢复到GMT + 0时它仍然是正确的吗?

回答

1

我认为会发生的是,当你启动MySQL服务器时,它会填充@@system_time_zone变量,但即使它发生变化(例如由于DST),它也不会反映在变量中。但是,虽然@@system_time_zone表示“GMT”,但当MySQL服务器评估当前日期,并且@@time_zone是系统时,它会询问系统日期,并且DST影响该日期,无论system_time_zone变量如何表示。所以基本上这里唯一的“问题”是system_timezone变量不会自动改变,即使系统的时区改变了。

+0

感谢您的支持。让我想知道@@ system_time_zone变量实际上有多有用,但是下面给了我足够的信息:SELECT TIMEDIFF(NOW(),UTC_TIMESTAMP()) – fazy 2010-10-12 14:02:53