Или я глуп, или что-то неправильно здесь.
У меня есть два SQL Server, тот находится на моей локальной машине (местное время +2 GMT), и другой где-то в другом месте (NOW()
кажется, возвращает +8 GMT), и я получаю доступ к ним через phpMyAdmin. У меня есть таблица, которая имеет a DATETIME
столбец. Я пробую
сохранить текущее время GMT/UTC и затем отобразить его снова, все еще как время GMT/UTC.
Первоначально я сохранил DATE_SUB(NOW(), INTERVAL 8 HOUR)
который работал просто великолепно. Однако затем я читал о UTC_TIMESTAMP()
и любил его больше, поскольку это было короче и MySQL manual
даже сказанный:
"Установка зоны текущего времени не влияет на значения, отображенные функциями, такими как UTC_TIMESTAMP (), или оценивает на ДАТЕ, ВРЕМЯ или столбцы DATETIME".
Так идеальное право? Кроме нет.
Давайте предположим, что Текущий GMT 18.02.2010 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?!)
Я пропускаю что-то?!
Возможно, потому что часы на онлайн-сервере неправильные?
Попробуйте запустить это:
SELECT @@system_time_zone, NOW(), UTC_TIMESTAMP()
и посмотрите, в какой зоне он возвращается и соответствует ли разница.