2013-10-08 3 views
6

Это было задано раньше, но не ответ, который я ищу. Я сохраняю все свои даты в MYSQL в UTC/GMT. Когда я извлечение пользовательских данных, где указано, ссылающееся время он лучше использовать CONVERT_TZ построить ...Что лучше всего подходит для обработки часовых поясов в MySQL?

SELECT CONVERT_TZ(mytime,'UTC',usertimezone) as mytime FROM table 

или лучше временно установить зону сеанса в Mysql, а затем сделать нормальные запросы?

SET time_zone = usertimezone; 

И если я использую второй, я просто сделать это один раз для каждого сеанса пользователя, или если я не использую упорный открытый, мне нужно, чтобы установить его перед каждым запросом?

+0

Любая причина не позволять этому делать в клиенте вместо этого? –

+0

Очень много работы по обработке каждого значения времени перед отображением. Попытка сделать минимум кодирования. :) –

+0

Вы сохраняете часовой пояс пользователя, а затем используете его для преобразования UTC в свой часовой пояс. – Kermit

ответ

3

Если ваши данные хранятся в столбцах типа TIMESTAMP, то вы должны SET time_zone, а MySQL будет автоматически конвертировать в/из UTC при извлечении/вставке — вам больше не нужно ничего делать. Это рекомендуемый подход.

+0

Я редко использую Timestamp, но, скорее, datetime. Это приложение представляет собой сбор данных большого объема, и я хочу написать несколько записей с одинаковой временной меткой. –

+1

@DougWolfgram: вы все равно можете предоставить заданное значение в поле 'TIMESTAMP' ([автоматическая инициализация и обновление] (http://dev.mysql.com/doc/en/timestamp-initialization.html) * необязательно *, хотя и активным по умолчанию). 'DATETIME' - совсем другой зверь и не хранит никакого понятия часового пояса (поэтому MySQL * не может * выполнять какое-либо неявное преобразование в сеанс' time_zone'). – eggyal

+0

Я не знаю. Когда я использую set_timezone для установки моей сессии в UTC, она, похоже, принудительно вставляет вставки даты и времени. –

7
  • Использование TIMESTAMP если вы хотите MySQL, чтобы сделать преобразование на основе time_zone настройки текущей сессии.

  • Используйте DATETIME, если вы возвращаете UTC в свое приложение для его обработки там. (Это было бы моим преимуществом.)

  • Не пытайтесь их смешивать. DATETIME ничего не сделает с настройкой time_zone, а TIMESTAMP не может считаться UTC, когда он возвращается в ваше приложение, если вы не уверены, что time_zone настроен на UTC.

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