Временные зоны MySQL

Есть ли исчерпывающий список временных зон MySQL?

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

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

Из документации MySQL 5.7 (акцент мой):

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

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

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

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

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

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

 --default-time-zone=timezone 

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

 --default-time-zone='timezone' 

Если вы являетесь пользователем SUPER MySQL, вы можете установить переменную 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; 

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

По умолчанию (по крайней мере, на установках на базе 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 эти таблицы или плохие вещи произойдут.


Редактировать:

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

MySQL> = 5.6.6

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

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

MySQL <5.6.6

Создайте файл ~/.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 строки, если вы не хотите вывода.

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

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

https://gist.github.com/4134305

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

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

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

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

 set time_zone = '-6:00'; 

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

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

 --default-time-zone=timezone 

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

 --default-time-zone='timezone' 

Если вы являетесь пользователем SUPER MySQL, вы можете установить переменную 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; 

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

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

  • Как установить часовой пояс MySQL?
  • Как конвертировать дату с одного часового пояса в другой часовой пояс
  • Преобразование временной зоны
  • Изменение часового пояса MySQL?
  • Как получить текущую дату и время вашего часового пояса в Java?
  • Всегда ли полезно хранить время в UTC или это тот случай, когда лучше хранить в местное время?
  • Как правильно установить JVM TimeZone
  • Как конвертировать datetime в timestamp с помощью C # /. NET (игнорируя текущий часовой пояс)
  • Как получить часовой пояс из местоположения с использованием координат широты и долготы?
  • Как получить текущий часовой пояс MySQL?
  • Драйвер JDBC MySQL 5.1.33 - Проблема с часовым поясом
  • Давайте будем гением компьютера.