我将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会出现这种差异?
答案 0 :(得分:2)
据推测,2个安装中的时区表是不同的。 时区数据存储在mysql数据库中的一堆表中。
在unix机器上,它们通常是从系统时区文件生成的,但是你的windows安装可能使用了mysql提供的文件:
http://dev.mysql.com/downloads/timezones.html
该数据启用了闰秒。要禁用它们,您可以运行此更新:
update mysql.time_zone set Use_leap_seconds ='N';
然后重新启动服务器。