MySQL UTC_TIMESTAMP()忽略当前的@@ time_zone设置

时间:2010-10-12 11:24:13

标签: mysql

我在英国有两个Linux / MySQL服务器,两个报告BST(GMT + 1)上的当前系统时区,但我发现MySQL的输出存在差异。

以下查询:

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。当GMT生效时,服务器进程于3月1日开始,所以我期待这一点。但是,UTC_TIMESTAMP()已正确(但意外地)报告UTC在本地时间前1小时。

在服务器B上,MySQL进程在夏季启动,因此它正确报告GMT日光时间,并在一小时前再次正确报告UTC。

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

1 个答案:

答案 0 :(得分:2)

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