Есть ли эквивалент PHP `date_default_timezone_set ()`, который работает в MySQL? - PullRequest
1 голос
/ 22 мая 2009

Это прекрасно работает в PHP

date_default_timezone_set('my/timezone');

$actualDate = date('Y-m-d');

Теперь, когда я делаю запросы, мне нравится делать

INSERT INTO articles (title, insert_date) VALUES ('My Title', now())

Проблема в том, что now() в MySQL отличается от того, что было бы, если бы оно было рассчитано в PHP (и, следовательно, в зависимости от установленного часового пояса).

Есть ли способ, скажем SQL-запроса, установить часовой пояс по умолчанию для MySQL?

Спасибо

Ответы [ 3 ]

3 голосов
/ 22 мая 2009

http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html

Если у вас есть привилегия SUPER, вы можете установить значение часового пояса глобального сервера во время выполнения с помощью следующего оператора:

mysql> SET GLOBAL time_zone = timezone;

Часовые пояса на соединение. Каждый клиент, который подключается, имеет собственную настройку часового пояса, заданную переменной time_zone сессии. Первоначально переменная сеанса берет свое значение из глобальной переменной time_zone, но клиент может изменить свой собственный часовой пояс с помощью следующего оператора:

mysql> SET time_zone = timezone;

1 голос
/ 22 мая 2009

Что-то, что вы можете попробовать, это сохранить все ваши даты / время в UTC. Итак, вы бы использовали

date_default_timezone_set('UTC');
$actualDate = date('Y-m-d');

и

INSERT INTO articles (title, insert_date) VALUES ('My Title', UTC_TIMESTAMP())

Затем вы должны преобразовать дату / время UTC в часовой пояс пользователя перед его отображением.

0 голосов
/ 22 мая 2009

Я обычно устанавливаю на сервере MySQL значение по Гринвичу, а затем использую gmdate вместо даты в PHP. Сохраняет все в GM Time, поэтому, если вы переходите на другой сервер или имеете 2 в разных часовых поясах, все не испортится.

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