MySQL: автоматическое сопоставление UTC с местным часовым поясом - PullRequest
2 голосов
/ 15 июля 2011

У меня есть форум, где пользователи могут оставлять комментарии. При создании комментария его соответствующее значение даты и времени сохраняется в формате UTC.

Я намерен представить данные по местному времени, например, «АЗИЯ / СИНГАПУР»;

2 варианта:

  1. используйте convert_tz каждый раз, когда запрашиваете базу данных. Мне не нравится подход, потому что это заставляет меня переписывать select_expr каждый раз, запрашивая.
  2. использовать SET time_zone = 'ASIA/SINGAPORE';

Что касается второго варианта, я хочу знать, какова область действия команды (здесь нет супер привилегий). более конкретно, скажем, если я использую приложение php, конфигурация становится недействительной, когда я закрываю соединение БД? я должен выполнить команду каждый раз, запрашивая БД?

Tnx.

1 Ответ

3 голосов
/ 15 июля 2011

Переменные MySQL находятся в области соединения (самый низкий уровень, между libmysql <-> mysqld).Это означает, что если сам PHP или некоторая библиотека приложения используют какой-либо пул соединений mysql, то вы можете наблюдать исчезновение этой переменной (из-за невидимого переключения соединений), и переменная определенно исчезнет после отключения.вам не нравится переписывать запрос, вы, вероятно, можете выбрать подходящее имя tz на лету, скажем, сформировать таблицу пользователей, если у вас есть идентификатор зарегистрированного пользователя, например:

SELECT convert_tz( ..., ..., (select user_tz from users where user_id = ...))
...