Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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, если вы не хотите выводить.

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

Ответ 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

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