Дополнительный вопрос /server/191331/should-servers-have-their-timezone-set-to-gmt-utc
Должен ли часовой пояс MySQL быть установлен на UTC или он должен быть таким же, как сервер или PHP? (Если это не UTC)
Каковы плюсы и минусы?
Дополнительный вопрос /server/191331/should-servers-have-their-timezone-set-to-gmt-utc
Должен ли часовой пояс MySQL быть установлен на UTC или он должен быть таким же, как сервер или PHP? (Если это не UTC)
Каковы плюсы и минусы?
Ответы:
Кажется, что не имеет значения, какой часовой пояс находится на сервере, если у вас есть время, установленное для текущего часового пояса, вы знаете часовой пояс столбцов даты и времени, которые вы храните, и знаете о проблемах с летним временем.
С другой стороны, если у вас есть контроль над часовыми поясами серверов, с которыми вы работаете, тогда вы можете настроить внутреннее время на UTC и не беспокоиться о часовых поясах и летнем времени.
Вот некоторые заметки, которые я собрал, о том, как работать с часовыми поясами в виде таблицы для меня и других, которые могут повлиять на то, какой часовой пояс выберет человек для своего сервера и как он / она будет хранить дату и время.
MySQL Часовой пояс Cheatsheet
Ноты:
GMT сбивает с толку секунды, поэтому был изобретен UTC.
Предупреждение! разные региональные часовые пояса могут давать одно и то же значение даты и времени из-за перехода на летнее время
Внутренне столбец метки времени MySQL хранится как UTC, но при выборе даты MySQL автоматически преобразует его в текущий часовой пояс сеанса.
При сохранении даты в метке времени MySQL предполагает, что дата находится в текущем часовом поясе сеанса, и преобразует ее в UTC для хранения.
Чтобы выбрать столбец отметки времени в формате UTC
независимо от того, в каком часовом поясе находится текущий сеанс MySQL:
Вы также можете установить часовой пояс глобального или глобального или текущего сеанса в UTC, а затем выбрать временную метку следующим образом:
Чтобы выбрать текущую дату и время в формате UTC:
Пример результата:
2015-03-24 17:02:41
Чтобы выбрать текущую дату и время в часовом поясе сеанса
Чтобы выбрать часовой пояс, который был установлен при запуске сервера
Возвращает "MSK" или "+04: 00" для московского времени, например, есть (или была) ошибка MySQL, когда, если задано числовое смещение, она не будет корректировать переход на летнее время
Чтобы узнать текущий часовой пояс
Он вернется 02:00:00, если ваш часовой пояс +2: 00.
Чтобы получить текущую метку времени UNIX (в секундах):
Чтобы получить столбец отметки времени как отметку времени UNIX
Чтобы получить столбец даты и времени UTC в качестве метки времени UNIX
Получить текущую дату и время часового пояса из положительного целого числа UNIX
Получить дату в формате UTC из метки времени UNIX
Получить текущую дату и время часового пояса из отрицательного целого числа UNIX
Есть 3 места, где часовой пояс может быть установлен в MySQL:
Примечание: часовой пояс может быть установлен в 2 форматах:
в файле "my.cnf"
или
@@ global.time_zone переменная
Чтобы увидеть, какое значение они установлены
Чтобы установить для него значение, используйте один из них:
переменная @@ session.time_zone
Чтобы установить его, используйте любой из них:
«@@ global.time_zone variable» и «@@ session.time_zone variable» могут возвращать «SYSTEM», что означает, что они используют часовой пояс, установленный в «my.cnf».
Чтобы имена часовых поясов работали (даже для часовых поясов по умолчанию), необходимо настроить таблицы данных о часовых поясах, которые необходимо заполнить: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support. HTML
Примечание: вы не можете сделать это, так как он вернет NULL:
Настройка таблиц часовых поясов mysql
Чтобы
CONVERT_TZ
работать, вам нужно заполнить таблицы часовых поясовЕсли они пусты, заполните их, выполнив эту команду
если эта команда выдает ошибку « данные слишком длинные для столбца« аббревиатура »в строке 1 », то это может быть вызвано добавлением символа NULL в конце аббревиатуры часового пояса
исправление заключается в том, чтобы запустить это
(убедитесь, что ваши dst правила сервера обновлены
zdump -v Europe/Moscow | grep 2011
https://chrisjean.com/updating-daylight-saving-time-on-linux/ )Просмотреть полную историю перехода на летнее и летнее время для каждого часового пояса
CONVERT_TZ
также применяет любые необходимые изменения DST на основе правил в приведенных выше таблицах и даты, которую вы используете.Примечание.
Согласно документам значение, установленное для time_zone, не изменится, например, если вы установите его как «+01: 00», тогда time_zone будет установлено как смещение от UTC, которое не следует за DST, поэтому он останется неизменным круглый год.
Только названные часовые пояса будут изменять время в летнее время.
Сокращения как
CET
всегда будут зимними иCEST
летними, в то время как +01: 00 всегда будутUTC
временем + 1 час, и оба не будут меняться с переходом на летнее время.system
Часовой пояс будет часовой пояс на хост - машине , где установлен MySQL (если MySQL не удается определить его)Вы можете прочитать больше о работе с DST здесь
связанные вопросы:
Источники:
источник
table
набор обновленийmodified
= '2016-07-07 08:10 +00: 00'UNIX_TIMESTAMP(NOW());
также на все ваши случаи использования,CONVERT_TZ()
где одним из параметров является `@@ session.time_zone. Для надежного преобразования времени UTC в метки времени UNIX вам, в основном, необходимо сначала установить time_zone сессии.Это рабочий пример:
источник
PHP и MySQL имеют свои собственные настройки часового пояса по умолчанию. Вы должны синхронизировать время между вашей базой данных и веб-приложением, иначе вы можете запустить некоторые проблемы.
Прочтите этот учебник: Как синхронизировать ваши часовые пояса PHP и MySQL
источник
date_default_timezone_set("America/Los_Angeles");
иmysql_query("SET time_zone='" . date('P', time()) . "'");
работал очень элегантно!Плюсы и минусы в значительной степени идентичны. Это зависит от того, хотите вы этого или нет.
Будьте внимательны, если часовой пояс MySQL отличается от вашего системного времени (например, PHP), сравнение времени или печати с пользователем потребует некоторой обработки.
источник