Как установить часовой пояс MySQL?

На одном сервере, когда я запускаю:

mysql> select now(); +---------------------+ | now() | +---------------------+ | 2009-05-30 16:54:29 | +---------------------+ 1 row in set (0.00 sec) 

На другом сервере:

 mysql> select now(); +---------------------+ | now() | +---------------------+ | 2009-05-30 20:01:43 | +---------------------+ 1 row in set (0.00 sec) 

Я думал, что это может быть полезно:

Есть три места, где часовой пояс может быть установлен в MySQL:

В файле «my.cnf» в разделе [mysqld]

 default-time-zone='+00:00' 

Переменная @@ global.time_zone

Чтобы узнать, для какого значения они установлены:

 SELECT @@global.time_zone; 

Чтобы установить для него значение, используйте один:

 SET GLOBAL time_zone = '+8:00'; SET GLOBAL time_zone = 'Europe/Helsinki'; SET @@global.time_zone = '+00:00'; 

(Использование названных часовых поясов, таких как «Европа / Хельсинки», означает, что вы должны правильно заполнить таблицу часового пояса.)

Имейте в виду, что +02:00 является смещением. Europe/Berlin – часовой пояс (имеет два смещения), а CEST – это время, соответствующее конкретному смещению.

@@ session.time_zone переменная

 SELECT @@session.time_zone; 

Чтобы установить его, используйте один:

 SET time_zone = 'Europe/Helsinki'; SET time_zone = "+00:00"; SET @@session.time_zone = "+00:00"; 

Оба могут вернуть SYSTEM, что означает, что они используют часовой пояс, указанный в my.cnf.

Чтобы названия часовых поясов работали, вы должны настроить свои информационные таблицы часовых поясов, которые необходимо заполнить: http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html . Я также упоминаю, как заполнять эти таблицы в этом ответе .

Чтобы получить текущее смещение часового пояса как TIME

 SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP); 

Он вернется в 02:00:00, если ваш часовой пояс равен +2: 00.

Чтобы получить текущую временную метку UNIX:

 SELECT UNIX_TIMESTAMP(); SELECT UNIX_TIMESTAMP(NOW()); 

Чтобы получить столбец временной метки как временную метку UNIX

 SELECT UNIX_TIMESTAMP(`timestamp`) FROM `table_name` 

Чтобы получить столбец datetime UTC как временную метку UNIX

 SELECT UNIX_TIMESTAMP(CONVERT_TZ(`utc_datetime`, '+00:00', @@session.time_zone)) FROM `table_name` 

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

Я сделал чит-коды здесь: Должен ли MySQL установить часовой пояс в UTC?

Чтобы установить его для текущего сеанса, выполните следующие действия:

 SET time_zone = timezonename; 

Когда вы можете настроить сервер часового пояса для MySQL или PHP:

Запомнить:

  1. Изменить систему часовых поясов. Пример для Ubuntu:

     $ sudo dpkg-reconfigure tzdata 
  2. Перезагрузите сервер, или вы можете перезапустить Apache 2 и MySQL:

     /etc/init.d/mysql restart 

Просто запустите это на своем сервере MySQL:

 SET GLOBAL time_zone = '+8:00'; 

Где +8: 00 будет вашим часовым поясом.

Для тех, кто все еще имеет эту проблему:

 value="jdbc:mysql://localhost:3306/dbname?serverTimezone=UTC" 

Работал для меня. Просто добавьте ?serverTimezone=UTC в конце.

Эта работа для меня для местоположения в Индии:

 SET GLOBAL time_zone = "Asia/Calcutta"; SET time_zone = "+05:30"; SET @@session.time_zone = "+05:30"; 

Вы можете указать часовой пояс по умолчанию для сервера при его запуске, см. --default-time-zone=timezone и, в частности, параметр --default-time-zone=timezone . Вы можете проверить глобальные и сеансовые часовые пояса с помощью

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

установить либо или оба с инструкцией SET , & c; см. http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html для получения более подробной информации.

Имейте в виду, что «Страна / зона» иногда не работает … Эта проблема не в ОС, версии MySQL и аппаратных средствах – я встречал ее с FreeBSD 4 и Slackware Linux в 2003 году и до сегодняшнего дня. MySQL от версии 3 до последней версии. Это ODD, но это происходит. Например:

 [email protected]# ls -la /usr/share/zoneinfo/US total 8 drwxr-xr-x 2 root root 4096 Apr 10 2013 . drwxr-xr-x 22 root root 4096 Apr 10 2013 .. lrwxrwxrwx 1 root root 18 Jul 8 22:33 Alaska -> ../SystemV/YST9YDT lrwxrwxrwx 1 root root 21 Jul 8 22:33 Aleutian -> ../posix/America/Adak lrwxrwxrwx 1 root root 15 Jul 8 22:33 Arizona -> ../SystemV/MST7 lrwxrwxrwx 1 root root 18 Jul 8 22:33 Central -> ../SystemV/CST6CDT lrwxrwxrwx 1 root root 18 Jul 8 22:33 Eastern -> ../SystemV/EST5EDT lrwxrwxrwx 1 root root 37 Jul 8 22:33 East-Indiana -> ../posix/America/Indiana/Indianapolis lrwxrwxrwx 1 root root 19 Jul 8 22:33 Hawaii -> ../Pacific/Honolulu lrwxrwxrwx 1 root root 24 Jul 8 22:33 Indiana-Starke -> ../posix/America/Knox_IN lrwxrwxrwx 1 root root 24 Jul 8 22:33 Michigan -> ../posix/America/Detroit lrwxrwxrwx 1 root root 18 Jul 8 22:33 Mountain -> ../SystemV/MST7MDT lrwxrwxrwx 1 root root 18 Jul 8 22:33 Pacific -> ../SystemV/PST8PDT lrwxrwxrwx 1 root root 18 Jul 8 22:33 Pacific-New -> ../SystemV/PST8PDT lrwxrwxrwx 1 root root 20 Jul 8 22:33 Samoa -> ../Pacific/Pago_Pago [email protected]# 

И такое заявление должно работать:

 SET time_zone='US/Eastern'; 

Но у вас есть эта проблема:

Код ошибки: 1298. Неизвестный или неправильный часовой пояс: «EUS / Eastern»

Взгляните на подпапку в вашем каталоге информации о зоне и посмотрите имя файла ACTUAL для символической ссылки, в этом случае это EST5EDT. Затем попробуйте следующее утверждение:

 SET time_zone='EST5EDT'; 

И это на самом деле работает так, как предполагается! 🙂 Держите этот трюк в уме; Я не видел, чтобы это было документировано в руководствах MySQL и официальной документации. Но чтение соответствующей документации – обязательная вещь: официальная документация по часовому поясу MySQL 5.5 – и не забывайте загружать данные о часовом поясе на ваш сервер так же, как это (запускать как пользователь root!):

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

Trick номер один – это должно быть сделано точно под пользователем root MySQL. Он может выйти из строя или создать нерабочий результат даже от пользователя, имеющего полный доступ к базе данных MySQL – я сам видел глюк.

Если вы используете PDO:

 $offset="+10:00"; $db->exec("SET time_zone='".$offset."';"); 

Если вы используете MySQLi:

 $db->MySQLi->query("SET time_zone='".$offset."';"); 

Подробнее о форматировании смещения здесь: https://www.sitepoint.com/synchronize-php-mysql-timezone-configuration/

Древний вопрос с еще одним предложением:

Если вы недавно изменили часовой пояс ОС, например, через:

 unlink /etc/localtime ln -s /etc/usr/share/zoneinfo/US/Eastern /etc/localtime 

… MySQL (или MariaDB) не заметит, пока вы не перезапустите службу db:

 service mysqld restart 

(или)

 service mariadb restart 

Если вы используете MySql Workbench, вы можете установить это, открыв представление администратора и перейдите на вкладку «Дополнительно». Верхний раздел – «Локализация», а первый флажок должен быть «по умолчанию – зона времени». Установите этот флажок, а затем введите нужный часовой пояс, перезапустите сервер, и вы должны быть добрым.

Вы должны настроить часовой пояс своего местоположения. Чтобы следовать ниже, процесс
Откройте MSQLWorkbench, напишите простую команду sql, как это;

 select now(); 
  • Как изменить часовой пояс mysql в java-соединении
  • Как использовать TimeZoneInfo для получения местного времени во время летнего времени?
  • Как получить часовой пояс из местоположения с использованием координат широты и долготы?
  • Как преобразовать время в часовой пояс устройства iPhone?
  • .NET TimeZoneInfo из часового пояса Олсона
  • ORA-01882: область часового пояса не найдена
  • Сопоставление почтового индекса США с часовым поясом
  • Java: Как вы конвертируете временную метку UTC в локальное время?
  • iOS: конвертировать UTC NSDate в локальный часовой пояс
  • Изменение часового пояса MySQL?
  • Драйвер JDBC MySQL 5.1.33 - Проблема с часовым поясом
  • Давайте будем гением компьютера.