MySQL Часовые пояса - PullRequest
       4

MySQL Часовые пояса

18 голосов
/ 21 марта 2012

Существует ли исчерпывающий список часовых поясов MySQL?

Кажется, что действительные значения time_zone в настройках MySQL зависят от операционной системы хоста, но мне не удалось найти список возможныхзначения.

Мне нужно время, чтобы показать местное время Калгари.

Ответы [ 6 ]

42 голосов
/ 15 марта 2013

По умолчанию (по крайней мере в установках на основе Debian) данные о часовых поясах не загружаются в MySQL. Если вы хотите проверить, загружены ли они, попробуйте выполнить:

SELECT CONVERT_TZ('2012-06-07 12:00:00', 'GMT', 'America/New_York');

Если он возвращает DATETIME (в данном случае 2012-06-07 08:00:00), у вас загружены часовые пояса. Если он возвращает NULL, это не так. Когда вы не загружены, вы ограничены конвертированием с использованием смещений (например, +10:00 или -6:00).

Во многих случаях это должно работать нормально, но бывают случаи, когда лучше использовать именованные часовые пояса, например, чтобы не беспокоиться о переходе на летнее время. Выполнение следующей команды загружает данные о часовом поясе из системы (только для Unix. Я не уверен, какой будет эквивалентная команда Windows):

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Если вам необходимо постоянно полагаться на часовые пояса MySQL, указанную выше команду следует выполнять каждый раз, когда системный часовой пояс обновляется . Вы также можете просто добавить его к еженедельной или ежемесячной работе cron, чтобы сделать это автоматически.

Затем, чтобы просмотреть список часовых поясов, просто сделайте следующее:

USE mysql;
SELECT * FROM `time_zone_name`;

Обратите внимание, что информация о часовом поясе занимает около 5 МБ в MySQL. Если вы хотите разгрузить информацию о часовом поясе, просто выполните следующее и перезапустите MySQL:

TRUNCATE `time_zone` ;
TRUNCATE `time_zone_leap_second` ;
TRUNCATE `time_zone_name` ;
TRUNCATE `time_zone_transition` ;
TRUNCATE `time_zone_transition_type` ;

Не DROP этих таблиц , иначе случится что-то плохое.


Edit:

На основании приведенного ниже комментария пользователя, если вы хотите, чтобы часовые пояса автоматически обновлялись при обновлении системы, сначала вам нужно разрешить root входить в систему без запроса пароля.

MySQL> = 5.6.6

Выполнить следующий [ источник ]:

mysql_config_editor set --login-path=client --host=localhost --user=root --password

MySQL <5.6.6 </h2> Создайте файл ~/.my.cnf (если он еще не существует) и добавьте следующее: [client] user=root password=yourMysqlRootPW Затем выполните chmod 600 ~/.my.cnf, чтобы никто другой не смог его прочитать. Обновление скрипта

Добавьте в crontab следующий скрипт, который будет выполняться один раз в день:

#!/bin/bash
# Find if there are any timezone files that have been modified in the last 24   
# hours and do not have ".tab" in the name (since these are not timezone files) 
if [ `find /usr/share/zoneinfo -mtime -1 | grep -v '\.tab' | wc -l` -gt 0 ]; then
    echo "Updating MySQL timezone info"
    # Note, suppressing STDERR here because of the .tab files above
    # that cause warnings.
    mysql_tzinfo_to_sql /usr/share/zoneinfo 2>/dev/null | mysql -u root mysql
    echo "Done!\n"
fi

Удалите строки echo, если вы не хотите выводить данные.

Примечание: это (в основном) не проверено. Дайте мне знать, если у вас возникнут проблемы, и я обновлю этот ответ.

18 голосов
/ 21 марта 2012

С документация по MySQL 5.7 (выделено):

Значения часового пояса могут быть заданы в нескольких форматах, ни один из которых не чувствителен к регистру:

Значение «SYSTEM» указывает, что часовой пояс должен совпадать с часовым поясом системы.

Значение может быть задано в виде строки, указывающей смещение от UTC, например «+10: 00» или «-6: 00 '.

Значение может быть задано в виде названного часового пояса, например, "Европа / Хельсинки", "США / Восток" или "МЕТ". Именованные часовые пояса можно использовать только в том случае, если информационные таблицы часовых поясов в базе данных mysql созданы и заполнены.

Следует отметить, что MySQL часовой пояс значение переменной по умолчанию - SYSTEM при запуске MySQL.Значение SYSTEM получается из настроек операционной системы (например, из файла, на который ссылается символическая ссылка /etc/localtime)

Переменная MySQL timezone переменная может быть инициализирована другим значением при запуске-вверх, предоставив следующую опцию командной строки:

--default-time-zone=timezone

В качестве альтернативы, если вы задаете значение в файле опций, вы должны использовать следующий синтаксис для установки переменной:

--default-time-zone='timezone'

Если вы являетесь пользователем MySQL SUPER, вы можете установить переменную SYSTEM time_zone во время выполнения из приглашения MYSQL>, используя следующий синтаксис:

SET GLOBAL time_zone=timezone;

MySQL также поддерживает отдельную SESSION timezone значения, которые по умолчанию равны значению переменной среды GLOBAL time_zone .Чтобы изменить значение сеанса часовой пояс во время сессии, используйте следующий синтаксис:

SET time_zone=timezone;

Чтобы запросить существующие значения настроек MYSQL timezone , вы можете выполнитьследующий SQL для получения этих значений:

SELECT @@global.time_zone, @@session.time_zone;

Для чего я стоил, я просто набрал в Google mysql time_zone допустимые значения конфигурации и посмотрел на первый результат.

4 голосов
/ 23 ноября 2012

Я пошел вперед и создал суть.

https://gist.github.com/4134305

https://gist.github.com/kinjal/9105369

Я надеюсь, что люди найдут это полезным.

3 голосов
/ 21 марта 2012

Полный список часовых поясов можно загрузить с веб-сайта MySQL в виде таблиц базы данных, которые импортируются на сервер MySQL.

Для времени Калгари можно указать Смещения UTC как

set time_zone = '-6:00';
0 голосов
/ 17 июля 2016

Следует отметить, что по умолчанию переменная часового пояса MySQL имеет значение SYSTEM при запуске MySQL.Значение SYSTEM получается из переменной среды GLOBAL time_zone операционной системы.

Переменная часового пояса MySQL по умолчанию может быть инициализирована другим значением при запуске, предоставив следующую опцию командной строки:

--default-time-zone=timezone

В качестве альтернативы, если вы задаете значение в файле опций, вы должны использовать следующий синтаксис для установки переменной:

--default-time-zone='timezone'

Если вы являетесь пользователем MySQL SUPER, вы можете установить SYSTEM time_zoneпеременная во время выполнения из приглашения MYSQL> с использованием следующего синтаксиса:

SET GLOBAL time_zone=timezone;

MySQL также поддерживает отдельные значения часового пояса SESSION, по умолчанию равное значению переменной среды GLOBAL time_zone.Чтобы изменить значение часового пояса сеанса во время СЕССИИ, используйте следующий синтаксис:

SET time_zone=timezone;

Чтобы запросить существующие значения настроек часового пояса MYSQL, вы можете выполнить следующий SQL для получения этих значений:

SELECT @@global.time_zone, @@session.time_zone;
0 голосов
/ 13 июля 2015

Единственный ответ: http://timezonedb.com/download

Текст, чтобы сделать этот ответ действительным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...