Ответ 1
Нет, невозможно изменить часовой пояс для одной базы данных в экземпляре MySQL.
Вы можете получить настройки сервера и клиента time_zone
:
SELECT @@global.time_zone, @@session.time_zone;
Вы также можете изменить часовой пояс клиента или часовой пояс для всего экземпляра MySQL.
Но будьте предельно осведомлены о импликации, которая имеет отношение к существующим клиентским соединениям, и о том, как будут интерпретировать значения DATETIME и TIMESTAMP, уже сохраненные в экземпляре.
Чтобы сервер time_zone устанавливался при запуске экземпляра MySQL, измените файл /etc/my.cnf
(или где бы ни были прочитаны параметры инициализации вашего mysql) в разделе [mysqld]:
[mysqld]
default-time-zone='+00:00'
- или -
добавьте параметр --default_time_zone='+00:00'
в mysqld_safe
ПРИМЕЧАНИЕ. Изменение настройки часового пояса на сервере MySQL НЕ изменяет значения, хранящиеся в существующих столбцах DATETIME или TIMESTAMP, НО, поскольку он эффективно изменяет контекст, в котором эти хранимые значения интерпретируются, будет выглядеть так, как будто все значения ARE сдвинуты. (В тех случаях, когда 08:00 считалось значением 8AM CST, с изменением времени_зоны сервера с CST на GMT, этот же '08: 00 'теперь будет считаться 8AM GMT, что будет эффективно 2AM CST.
Также имейте в виду, что столбцы TIMESTAMP всегда хранятся в формате UTC, а столбцы DATETIME не имеют часовой пояс. http://dev.mysql.com/doc/refman/5.5/en/datetime.html
Каждый сеанс клиента может изменить настройку часового пояса для своего собственного сеанса:
SET time_zone='-06:00';
Но ничто из этого не "решает" проблему изменения часового пояса, оно просто перемещает проблему преобразования.
Ничего изначально не "плохо" при обработке обращений к часовому поясу с помощью прикладного уровня; иногда, что лучшее место для обработки. Это нужно сделать правильно и последовательно.
(Что странно в настройке, которую вы описываете, так это то, что приложение хранит значения DATETIME, как если бы для сервера MySQL time_zone установлено значение GMT, но для сервера MySQL time_zone установлено что-то еще.)