2016-12-15 1 views
0

Я пытаюсь установить CURRENT_TIMESTAMP в UTC прямо перед вставкой строки в БД. Из того, что я прочитал, вы можете сделать это для каждого соединения.MySQL для каждого часового пояса за соединение не заполняется CURRENT_TIMESTAMP правильно

Часовой пояс моего сервера EST (+5: 00).

я сделать следующее при отладке:

  1. ВЫБЕРИТЕ CURRENT_TIMESTAMP; Храните этого парня в использовании при отладке.
  2. SET TIME_ZONE = '-00: 00';
  3. SELECT CURRENT_TIMESTAMP; Храните этого парня в использовании при отладке.
  4. На данный момент я ожидаю, что время_соединения моей базы данных будет UTC.
  5. INSERT/UPDATE запись как обычный.

Затем я передаю две метки времени на свою страницу, чтобы посмотреть, что они собой представляют.

Первый дефолт EST: [CURRENT_TIMESTAMP] => 2016-12-15 14:01:52

Во-вторых, как установлено UTC по запросу: [CURRENT_TIMESTAMP] => 2016-12-15 19:01:52

Тем не менее, запись в БД имеет те CURRENT_TIMESTAMP из 2016-12-15 14:01: 52 (EST).

Не знаю, почему!

Я использую Sequel Pro для просмотра своей БД. Кажется, что Sequel Pro преобразует временные метки в локальное время.

Рекордные возвращается через SQL по желанию/ожидалось:

2016-12-15 19:46:50

сиквел про дисплеи:

2016-12-15 14:46:50

Итак ... это оставляет меня чуть расстройство с моим выбором DB в том, как он обрабатывает часовые пояса. Если кто-то думает, что это не актуальная проблема, дайте мне знать :)

ответ

1

TIMESTAMP типы данных всегда хранится в MySQL в UTC. Невозможно сохранить его со ссылкой на какой-либо другой часовой пояс, за исключением смещения его. Он переводится, всякий раз, когда он отображается, используя текущую настройку time_zone. Невозможно просмотреть значение сохраненного значения TIMESTAMP, за исключением установки time_zone параметра UTC или -00:00 или его эквивалента, а затем его считывания.

Так,

SET time_zone = 'America/Halifax'; 
SELECT @a := CURRENT_TIMESTAMP; --> 2016-12-15 15:49:49 
SET time_zone = 'UTC'; 
SELECT @a, CURRENT_TIMESTAMP;  --> 2016-12-15 15:49:49 2016-12-15 19:49:49 
SET time_zone = 'America/Halifax'; 
SELECT @a, CURRENT_TIMESTAMP;  --> 2016-12-15 15:49:49 2016-12-15 15:49:49 

Во второй строке этой последовательности, текущая метка времени оказывается в переменной @a текстовой строки, в контексте атлантического поясного времени.

В четвертой строке отображается текстовая строка, а текущая временная метка отображается в контексте UTC.

DATETIME и DATE данные хранятся дословно, без ссылки на настройки часового пояса.

+0

Это имеет смысл. Однако я обнаружил, что проблема связана с приложением, в котором я использую для просмотра данных БД (Sequel Pro). Запись возвращается из инструкции SELECT, как и ожидалось, но в приложении по-разному отображается. – Gurnzbot

Смежные вопросы