MySQL: автоматическое сопоставление UTC с местным часовым поясом

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

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

2 варианта:

  1. использование convert_tz каждый раз запрашивая базу данных. Мне не нравится подход, потому что он заставляет меня переписать select_expr каждый раз запрашивая.
  2. использование 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 = ...))
Другие вопросы по тегам