Часовой пояс неверен в базе данных - PullRequest
1 голос
/ 06 марта 2019

Я сделал дату с помощью функции CURRENT_TIMESTAMP в phpmyadmin. И выходное значение часов неверно на 1 час. Я попытался изменить его в MySQL, используя SET TIME_ZONE = '+01:00';

Однако он все равно отправит дату на 1 час раньше. Есть предложения?

1 Ответ

0 голосов
/ 06 марта 2019

Вы затрагиваете сложную тему.

Когда столбец таблицы имеет тип данных TIMESTAMP, все значения сохраняются в UTC после перевода с вашего текущего time_zone установка на UTC.Когда вы извлекаете значения из этих столбцов, они переводятся обратно в ваш текущий time_zone.Это удобно, потому что вы можете представлять метки даты пользователям во всем мире по их собственному местному времени, обрабатывая time_zone как предпочтение пользователя.

Когда столбец имеет тип данных DATETIME, переводы doне происходит .

Вот пример:

CREATE TABLE t1 (
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  dt DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);


SET time_zone = 'UTC';
INSERT INTO t1 (ts, dt) VALUES (NOW(), NOW());
SET time_zone = 'Europe/Paris';
INSERT INTO t1 (ts, dt) VALUES (NOW(), NOW());


SET time_zone = 'UTC';
SELECT  * FROM t1;    /* notice differences presentation of ts columns, ds stay the same */
SET time_zone = 'Europe/Paris';
SELECT  * FROM t1;    /* again */
SET time_zone = 'America/Halifax';
SELECT  * FROM t1;    /* again */

Совет для профессионалов: Если вы используете именованные часовые пояса Europe/Paris, вы автоматически получите преимущество от правил перехода на летнее время длялокаль, которую вы выбрали.Правила, известные как база данных zoneinfo , поддерживаются IANA .Многие дистрибутивы Linux включают регулярные обновления в базу данных zoneinfo.

...