Установите часовой пояс базы данных MySQL на GMT

Мне нужно изменить часовой пояс для одной базы данных, это возможно?

Я знаю, что мы можем изменить часовой пояс в нашем WHM (мы используем выделенный сервер от hostgator), однако большое количество устаревшего программного обеспечения, работающего на сервере, имеет в своем распоряжении много +6 часов (например, серверный часовой пояс CST, нам нужно время в GMT, поэтому предыдущие разработчики изменили дату/время вручную в коде - плохо!).

Теперь я работаю над новым программным обеспечением и хотел бы иметь его в GMT, я знаю, что могу использовать date_default_timezone_set ('GMT'), однако это не решит вставки MySQL, где столбец datetime устанавливается в CURRENT_TIMESTAMP, поскольку он будет insert @часовой пояс CST.

Ответ 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 установлено что-то еще.)

Ответ 2

Если вы не можете изменить текущий часовой пояс, вы можете изменить результат.

дата 2015-01-05 12:06:16

Select date + Interval 2 Hour 'date' From ExampleTable

дата 2015-01-05 14:06:16

Ответ 3

Вы можете изменить значение по умолчанию вместо ввода current_timestamp, чтобы оно добавляло current_timestamp, добавленное к часовому смещению вашего часового пояса. Я просто так делал, когда не нашел решения, пришлось придумывать свое.