2016-11-01 8 views
0

Я просто вставляю в MySQL с помощью FROM_UNIXTIME, но дает неправильную дату. Мой запрос былFROM_UNIXTIME to MySQL возвращает неверную дату

INSERT INTO `phpc_occurrences` 
SET `eid` = '15', 
    `time_type` = '0', 
    `start_ts` = FROM_UNIXTIME('1479189600'), 
    `end_ts` = FROM_UNIXTIME('1479232800'); 

1479189600 должен вернуть Tue, 15 Nov 2016 06:00:00 GMT но моя локальная база данных MySQL возвращает Tue, 15 Nov 2016 13:00:00 GMT

Мой часовой пояс компьютер UTC +7, но я уже изменить его на UTC 0 и дата, начиная с MySQL до сих пор вернуть неправильный стоимость.

Может кто-нибудь объяснить, что происходит?

+0

MySQL использует часовой пояс сервера, а не часовой пояс клиента. – Barmar

ответ

0

Обязательно обновите переменную time_zone до GMT. Например, мой текущий TIME_ZONE является GMT + 03, так что я получаю:

select FROM_UNIXTIME('1479189600'); 
+-----------------------------+ 
| FROM_UNIXTIME('1479189600') | 
+-----------------------------+ 
| 2016-11-15 09:00:00   | 
+-----------------------------+ 

но изменение TIME_ZONE по Гринвичу (GMT) значение дает другой результат:

set time_zone='+00:00'; 
select FROM_UNIXTIME('1479189600'); 
+-----------------------------+ 
| FROM_UNIXTIME('1479189600') | 
+-----------------------------+ 
| 2016-11-15 06:00:00   | 
+-----------------------------+ 

Может MySQL не обновлять это внутреннее переменные time_zone с системным часовым поясом?

Также следует отметить, что у ваших полей «start_ts» и «end_ts» есть типы TIMESTAMP. Если это так, вы можете не беспокоиться о временной отметке при вставке в таблицу, это имеет значение только при выборе некоторых данных, потому что ваш клиент mysql фактически конвертирует из значения TIMESTAMP (который фактически является только int32) в текущее местное время, поэтому вам нужно напомнить свой db-клиент с нужным часовым поясом.

 Смежные вопросы

  • Нет связанных вопросов^_^