Почему MySQL CONVERT_TZ изменяет секунды после настройки часового пояса?
Я храню значения даты и времени UTC в MySQL. Я использую CONVERT_TZ для обработки преобразования часового пояса, чтобы запросить / сохранить локальное время в / из UTC в базе данных.
После тестирования я заметил эту странную особенность работы конвертации. Может кто-нибудь объяснить, почему MySQL добавляет 23 секунды при использовании смещения -4:00, а не при использовании метки эквивалентного часового пояса?
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
Я использую MySQL 5.0.67-community-nt-log на моем ноутбуке с Windows XP. I'm running the query from a locally hosted phpMyAdmin 3.1.5 and I can see it also within my own app in PHP 5.2.8.
Comparing with my Dreamhost account, both queries return the proper datetime ('2009-09-06 21:00:00'). They run MySQL 5.0.45-log on Linux and PHP 5.2.6.
Why would my own install of MySQL have this discrepancy?
1 ответ
Предположительно таблицы часовых поясов различаются на 2 установках. Данные о часовом поясе хранятся в куче таблиц в базе данных mysql.
На Unix-машинах они обычно генерируются из файлов системного часового пояса, но ваша установка Windows, вероятно, использовала файлы, предоставленные mysql:
http://dev.mysql.com/downloads/timezones.html
Эти данные имеют дополнительные секунды. Чтобы отключить их, вы можете запустить это обновление:
update mysql.time_zone set Use_leap_seconds ='N';
а затем перезапустите свой сервер.