У меня есть странная проблема с часовым поясом 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)
Но значение, вставленное в БД, все еще указывает на часовой пояс сервера: ((
Любые идеи, как работать через это?
Вы должны понимать, что MySQL поддерживает несколько настроек часового пояса:
Подробнее см. http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html .
Значения даты / времени сохраняются двумя различными способами:
Из вышесказанного должно стать ясно, что значения, которые вы видите, когда вы читаете из столбцов, основанных на отметке времени на основе unix, не обязательно являются тем, что действительно хранится в БД. Они преобразуются с использованием часового пояса сервера и часового пояса клиента. Результат может сбить с толку, если вы не понимаете детали механики.
Для первого теста попробуйте выяснить текущие настройки в каждой из ваших клиентских программ, выполнив
SELECT @@global.time_zone, @@session.time_zone;
Глобальный часовой пояс всегда будет одинаковым. Но часовой пояс сеанса может отличаться от клиентского приложения к клиентскому приложению и будет изменять результаты ваших операций чтения и записи.