Как правильно установить часовой пояс mysql

У меня есть странная проблема с часовым поясом mysql.

В моем файле конфигурации сайта у меня есть эта строка, которая устанавливает часовой пояс:

mysql_query("SET SESSION time_zone = '$offset';"); // Offset is properly calculated, no worries about that 

Самое смешное, что если я добавлю еще одну строку сразу после этого, вот так:

 $q = mysql_query("SELECT NOW() as now"); $row = mysql_fetch_array($row); echo $row["now"]; 

После выполнения этого кода время отображается правильно.

НО, в некоторых других запросах я вставляю строки в таблицы, у которых есть столбец с именем date, по умолчанию CURRENT_TIMESTAMP.

Строки вставляются следующим образом:

 INSERT INTO `sessions` (`user_id`) VALUES `1` 

(Таблица сеансов имеет столбец date который по умолчанию имеет значение CURRENT_TIMESTAMP)

Но значение, вставленное в БД, все еще указывает на часовой пояс сервера: ((

Любые идеи, как работать через это?

Solutions Collecting From Web of "Как правильно установить часовой пояс mysql"

Вы должны понимать, что MySQL поддерживает несколько настроек часового пояса:

  • Системный часовой пояс (в основном часовой пояс, установленный в ОС)
  • Часовой пояс сервера (часовой пояс, используемый MySQL)
  • Клиентский часовой пояс (часовой пояс сеанса, используемый для каждого соединения)

Подробнее см. http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html .

Значения даты / времени сохраняются двумя различными способами:

  • Все значения на основе временной метки unix всегда хранятся в формате UTC. Когда они хранятся и читаются, они внутренне преобразуются из часового пояса клиента и в него. То же самое верно для функций NOW () и CURTIME (), поскольку они основаны на временной шкале.
  • Столбцы DATE, TIME и DATETIME (которые хранят свои значения в формате hour-minutes-second year-month-day) не зависят от настроек часового пояса и никогда не преобразуются.

Из вышесказанного должно стать ясно, что значения, которые вы видите, когда вы читаете из столбцов, основанных на отметке времени на основе unix, не обязательно являются тем, что действительно хранится в БД. Они преобразуются с использованием часового пояса сервера и часового пояса клиента. Результат может сбить с толку, если вы не понимаете детали механики.

Для первого теста попробуйте выяснить текущие настройки в каждой из ваших клиентских программ, выполнив

 SELECT @@global.time_zone, @@session.time_zone; 

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