Spec-Zone .ru
спецификации, руководства, описания, API

10.6.1. Остающийся Ток с Изменениями Часового пояса

Как отмечалось ранее, когда часовой пояс управляет изменением, приложения, которые используют старые правила, становятся устаревшими. Чтобы остаться текущим, необходимо удостовериться, что Ваша системная информация о зоне текущего времени использования используется. Для MySQL есть два фактора, чтобы рассмотреть в остающемся токе:

Если Вы не уверены, доступны ли именованные часовые пояса для использования или как установка часового пояса сервера или клиентами, которые устанавливают их собственный часовой пояс, проверяют, пусты ли Ваши таблицы часового пояса. Следующий запрос определяет, есть ли у таблицы, которая содержит имена часового пояса, какие-либо строки:

mysql> SELECT COUNT(*) FROM
        mysql.time_zone_name;+----------+| COUNT(*) |+----------+|        0 |+----------+

Количество нуля указывает, что таблица пуста. В этом случае никто не может использовать названные часовые пояса, и Вы не должны обновить таблицы. Количество, больше чем нуль, указывает, что таблица не пуста и что ее содержание доступно, чтобы использоваться для именованной поддержки часового пояса. В этом случае следует убедиться, что перезагрузили свои таблицы часового пояса так, чтобы любой, кто использует именованные часовые пояса, получил корректные результаты запроса.

Чтобы проверить, обновляется ли Ваша установка MySQL должным образом для разнообразия в правилах Летнего времени, используйте тест как тот после. Пример использует значения, которые являются соответствующими в течение DST 2007 года 1-часовое изменение, которое происходит в Соединенных Штатах 11 марта в 2:00.

Тест использует эти два запроса:

SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central');SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');

Эти две временных стоимости указывают время, в котором происходит изменение DST, и использование именованных часовых поясов требует, чтобы таблицы часового пояса использовались. Требуемый результат состоит в том, что оба запроса возвращают тот же самый результат (входное время, преобразованное в эквивалентное значение в часовом поясе 'US' / Центральном' часовом поясе).

Прежде, чем обновить таблицы часового пояса, Вы видели бы неправильный результат как это:

mysql> SELECT CONVERT_TZ('2007-03-11
        2:00:00','US/Eastern','US/Central');+------------------------------------------------------------+| CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central') |+------------------------------------------------------------+| 2007-03-11 01:00:00                                        |+------------------------------------------------------------+mysql> SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');+------------------------------------------------------------+| CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central') |+------------------------------------------------------------+| 2007-03-11 02:00:00                                        |+------------------------------------------------------------+

После обновления таблиц следует видеть корректный результат:

mysql> SELECT CONVERT_TZ('2007-03-11
        2:00:00','US/Eastern','US/Central');+------------------------------------------------------------+| CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central') |+------------------------------------------------------------+| 2007-03-11 01:00:00                                        |+------------------------------------------------------------+mysql> SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');+------------------------------------------------------------+| CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central') |+------------------------------------------------------------+| 2007-03-11 01:00:00                                        |+------------------------------------------------------------+