Почему 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. Я запускаю запрос из локально размещенного phpMyAdmin 3.1.5, и я также вижу его в своем собственном приложении в PHP 5.2.8.

По сравнению с моей учетной записью Dreamhost оба запроса возвращают правильную дату и время («2009-09-06 21:00:00»). Они запускают MySQL 5.0.45-log в Linux и PHP 5.2.6.

Почему моя собственная установка MySQL может иметь это несоответствие?


person spoulson    schedule 12.06.2009    source источник


Ответы (1)


Предположительно, таблицы часовых поясов различаются в двух установках. Данные часового пояса хранятся в наборе таблиц в базе данных mysql.

На машине unix они обычно генерируются из файлов системного часового пояса, но ваша установка Windows, вероятно, использовала файлы, предоставленные mysql:

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

В этих данных включены дополнительные секунды. Чтобы отключить их, вы можете запустить это обновление:

update mysql.time_zone set Use_leap_seconds ='N';

а затем перезапустите свой сервер.

person Craig    schedule 12.06.2009