Временные зоны MySQL
Есть ли исчерпывающий список временных зон MySQL?
Похоже, что допустимые значения для time_zone
в настройках MySQL зависят от операционной системы хоста, но мне не удалось найти список возможных значений.
Мне нужно время, чтобы показать местное время в Калгари.
Ответы
Ответ 1
Из документация (выделено мной):
значения часового пояса могут быть заданы в нескольких форматах, ни одна из которых не является чувствительный к регистру:
Значение "SYSTEM" указывает, что часовой пояс должен быть таким же, как часовой пояс системы.
Значение может быть задано как строка, указывающая смещение от UTC, такое как "+10: 00" или "-6: 00".
Значение может быть указано как именованный часовой пояс, например "Европа/Хельсинки", "США/Восток" или "МЕТ". Именованные часовые пояса могут быть используется только в том случае, если информационные таблицы часовых поясов в базе данных mysql были созданы и заселены. переменная time_zone
Следует отметить, что значением по умолчанию для переменной часового пояса MySQL является SYSTEM при запуске MySQL. Значение SYSTEM получается из переменной среды GLOBAL time_zone.
Переменная MySQL по умолчанию для 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;
Для чего это стоит, я просто использовал google-версию mysql time_zone для правильных значений и посмотрел на первый результат.
Ответ 2
По умолчанию (по крайней мере, на установках на основе 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
Создайте файл ~/.my.cnf
(если он еще не существует) и добавьте следующее:
[client]
user=root
password=yourMysqlRootPW
Затем выполните chmod 600 ~/.my.cnf
, чтобы убедиться, что никто не может его прочитать.
Обновление script
Добавьте следующий script в 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
, если вы не хотите выводить.
Примечание. Это (в основном) непроверено. Дайте мне знать, если у вас есть какие-либо проблемы, и я обновлю этот ответ.
Ответ 3
Я пошел вперед и создал суть.
https://gist.github.com/4134305
https://gist.github.com/kinjal/9105369
Я надеюсь, что люди сочтут это полезным.
Ответ 4
Исчерпывающий список часовых поясов может быть загружен с сайта MySQL в виде таблиц базы данных, которые импортируются в сервер MySQL.
Для времени Калгари вы можете указать смещения UTC как
set time_zone = '-6:00';
Ответ 5
Следует отметить, что значением по умолчанию для переменной часового пояса MySQL является SYSTEM при запуске MySQL. Значение SYSTEM получается из переменной среды GLOBAL time_zone.
Переменная MySQL по умолчанию для 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;
Ответ 6
Единственный ответ:
http://timezonedb.com/download
Текст, чтобы сделать этот ответ действительным