我在英国有两个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时仍然是正确的吗?
答案 0 :(得分:2)
我认为当你启动MySQL服务器时,它会填充@@system_time_zone
变量,但即使它发生变化(例如,由于DST),它也不会反映在变量中。但是,虽然@@system_time_zone
表示“GMT”,但当MySQL服务器评估当前日期并且@@time_zone
是系统时,它会询问系统日期,而DST会影响该日期,无论system_time_zone
是什么{{ 1}}变量说。因此,基本上唯一的“问题”是system_timezone
变量不会自动更改,即使系统的时区发生变化。