MySQL: автоматическое сопоставление UTC с местным часовым поясом
У меня есть форум, где пользователи могут оставлять комментарии. При создании комментария его соответствующее значение даты и времени сохраняется в формате UTC.
Я намерен представить данные по местному времени, например, "АЗИЯ / СИНГАПУР";
2 варианта:
- использование
convert_tz
каждый раз запрашивая базу данных. Мне не нравится подход, потому что он заставляет меня переписатьselect_expr
каждый раз запрашивая. - использование
SET time_zone = 'ASIA/SINGAPORE';
Что касается второго варианта, я хочу знать, какова область действия команды (здесь нет супер привилегий). более конкретно, скажем, если я использую приложение php, конфигурация становится недействительной, когда я закрываю соединение БД? я должен выполнить команду каждый раз, запрашивая БД?
Tnx.
1 ответ
Переменные MySQL ограничены в соединении (самый низкий уровень, между libmysql <-> mysqld). Это означает, что если сам PHP или некоторая библиотека приложения используют какой-либо пул соединений mysql, то вы можете наблюдать исчезновение этой переменной (из-за невидимого переключения соединений), и переменная определенно исчезнет после отключения.
Если вас не устраивает переписывание запроса, вы, вероятно, можете выбрать подходящее имя tz на лету - скажем, сформировать таблицу пользователей, если у вас есть идентификатор зарегистрированного пользователя, например:
SELECT convert_tz( ..., ..., (select user_tz from users where user_id = ...))