2009-06-12 23 views
0

我在UTC中存储UTC日期时间值。我使用CONVERT_TZ来处理时区转换,以便在数据库中查询/保存UTC /从本地日期时间。为什么MySQL CONVERT_TZ改变时区调整后的秒数?

经过测试,我注意到转换工作原理中的这个奇怪的特点。任何人都可以解释为什么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有这种差异?

回答

2

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

他们通常是从系统时区文件生成的UNIX计算机上,但您的Windows安装可能使用MySQL提供的文件:

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

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

update mysql.time_zone set Use_leap_seconds ='N'; 

然后重新启动服务器。

相关问题