Невозможно изменить часовой пояс сервера Mysql
У нас установлен часовой пояс IST (индийское стандартное время) для начала -
mysql> show global variables like '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | IST |
| time_zone | SYSTEM |
+------------------+--------+
SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> select NOW();
+---------------------+
| NOW() |
+---------------------+
| 2017-10-31 17:05:26 |
+---------------------+
Выше показывает то же время, что и время сервера, которое также указано в IST.
Мы хотим изменить его на UTC. По сравнению с сервером, где часовой пояс является UTC, единственное другое значение на этом сервере, кажется, system_time_zone
переменная, которая установлена в IST, как показано выше.
Не уверен, какую переменную / конфиг изменить.
Мы пытались изменить default-time-zone
в my.ini, но это изменило time_zone
переменная, а не system_time_zone
,
Следующее также попытается обновить time_zone
как я понял -
SET GLOBAL time_zone="+00:00";
Так что, не уверен, что обновит system_time_zone
,
Уже проверил /questions/31217832/kak-izmenit-bazu-dannyih-mysql-na-utc/31217842#31217842 Не уверен, в чем именно разница между system_time_zone и time_zone.
Также в документации Mysql говорится:
Допустимые значения для --timezone или TZ зависят от системы.
Невозможно найти подходящее значение для IST на серверах Windows и Cent OS. Из этой статьи, кажется, нужно некоторое расследование. Может кто-нибудь помочь здесь? Любые указатели.
Фон
Я хочу видеть разницу во времени в 5:30 часов select NOW();
на сервере. В настоящее время он отображает то же время, что и время сервера приложений (которое также является IST). Мы пытаемся добавить это несоответствие, чтобы воспроизвести тестовый сценарий.
Обновить
Получение следующего в моей настройке Windows -
mysql> SET time_zone = 'Asia/Kolkata';
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Kolkata'
mysql> SET time_zone = "Asia/Kolkata";
ERROR 1298 (HY000): Unknown or incorrect time zone: 'Asia/Kolkata'
mysql> SET time_zone = "UTC";
ERROR 1298 (HY000): Unknown or incorrect time zone: 'UTC'
1 ответ
По умолчанию системный часовой пояс вашего программного обеспечения MySQL установлен на часовой пояс вашего сервера. Это то что SYSTEM
значит в этой обстановке. В свою очередь, ваш сервер настроен на индийское время.
Обратите внимание, что сейчас () и TIMESTAMP
данные всегда переводятся в местное время при отображении или поиске. Местное время определяется настройкой time_zone
переменная, либо установленная для вашего соединения MySQL, либо глобальная.
Попробуйте эту последовательность и посмотрите, получите ли вы СЕЙЧАС () в UTC, а затем в индийское время. Эта последовательность устанавливает ваше соединение time_zone
переменная. При этом он переопределяет настройки системы.
SET time_zone = 'UTC';
SELECT NOW();
SET time_zone = 'Asia/Kolkata'; /* zoneinfo name for India time */
SELECT NOW();
Если вы получите то, что ожидаете, вы можете изменить настройку часового пояса по умолчанию на вашем сервере с индийского времени на UTC. Как правило, это хорошая практика. То, как вы это сделаете, зависит от операционной системы вашего сервера. Это говорит о том, как сделать это для Ubuntu.
https://askubuntu.com/questions/323131/setting-timezone-from-terminal
Или вы можете отредактировать ваш конфигурационный файл MySQL, добавив в него следующую строку:
default-time-zone='UTC'
и перезапустите серверное программное обеспечение MySQL.
В США, где у нас целая куча часовых поясов, обычно полезно установить значение по умолчанию UTC. Затем мы разрешаем пользователям выбирать предпочтения часового пояса при регистрации для использования веб-приложения. Возможно, если ваше веб-приложение полностью для Индии, вам не нужна дополнительная сложность.