Как SELECT UTC_TIMESTAMP () может вернуть -10: 00 UTC? - PullRequest
7 голосов
/ 18 февраля 2010

Либо я тупой, либо здесь что-то не так.

У меня есть два SQL-сервера, один находится на моей локальной машине (местное время + 2 по Гринвичу ), а другой где-то еще (NOW(), кажется, возвращает + 8 по Гринвичу ) и я получаю к нему доступ через phpMyAdmin. У меня есть таблица, в которой есть DATETIME столбец. Я пытаюсь

, чтобы сохранить текущее время по Гринвичу / UTC и затем снова отобразить его, все еще как время по Гринвичу / UTC.

Первоначально я хранил DATE_SUB(NOW(), INTERVAL 8 HOUR), который работал просто отлично. Однако потом я прочитал о UTC_TIMESTAMP(), и он мне понравился больше, так как он был короче, а MySQL manual даже сказал:

"Текущая настройка часового пояса не влияет на значения, отображаемые функциями например, UTC_TIMESTAMP () или значения в столбцах DATE, TIME или DATETIME. "

Так прекрасно, верно? Кроме №

Давайте предположим, что текущим по Гринвичу является 2010-02-18 17: 18: 17 (я даже дважды проверил это с кем-то в Британии).

На моем локальном (+2) сервере я получаю следующие результаты для следующих запросов:

SELECT NOW(); 2010-02-18 19:18:17

SELECT UTC_TIMESTAMP(); 2010-02-18 17:18:17

На мой онлайн-сервер Я получаю:

SELECT NOW(); 2010-02-19 01:18:17

SELECT UTC_TIMESTAMP(); 2010-02-19 07:18:17 (WHY?!)

Я что-то упустил?!

1 Ответ

12 голосов
/ 18 февраля 2010

Возможно, потому что часы на онлайн-сервере неправильные?

Попробуйте запустить это:

SELECT  @@system_time_zone, NOW(), UTC_TIMESTAMP()

и посмотрите, в какую зону он возвращается и соответствует ли он разнице.

...