为什么MySQL CONVERT_TZ会在时区调整后改变秒数?

时间:2009-06-12 16:23:09

标签: mysql timezone convert-tz

我将UTC日期时间值存储在MySQL中。我使用CONVERT_TZ来处理时区转换,以在数据库中查询/保存本地日期时间到/从UTC。

经过测试,我注意到转换的工作方式存在这种奇怪的特性。任何人都可以解释为什么MySQL在使用-4:00小时偏移时增加23秒,但在使用等效时区标签时却没有?

select convert_tz('2009-06-12 01:00:00', 'UTC', '-4:00')
2009-06-11 21:00:23

select convert_tz('2009-06-12 01:00:00', 'UTC', 'US/Eastern')
2009-06-11 21:00:00

我在Windows XP笔记本电脑上运行MySQL 5.0.67-community-nt-log。我从本地托管的phpMyAdmin 3.1.5运行查询,我也可以在PHP 5.2.8中的自己的应用程序中看到它。

与我的Dreamhost帐户相比,两个查询都会返回正确的日期时间('2009-09-06 21:00:00')。他们在Linux和PHP 5.2.6上运行MySQL 5.0.45-log。

为什么我自己安装的MySQL会出现这种差异?

1 个答案:

答案 0 :(得分:2)

据推测,2个安装中的时区表是不同的。 时区数据存储在mysql数据库中的一堆表中。

在unix机器上,它们通常是从系统时区文件生成的,但是你的windows安装可能使用了mysql提供的文件:

http://dev.mysql.com/downloads/timezones.html

该数据启用了闰秒。要禁用它们,您可以运行此更新:

update mysql.time_zone set Use_leap_seconds ='N';

然后重新启动服务器。