从UNIXTIME到MySQL返回错误的日期

从UNIXTIME到MySQL返回错误的日期,mysql,timestamp,unix-timestamp,Mysql,Timestamp,Unix Timestamp,我只是使用FROM_UNIXTIME插入MySQL,但它给出了错误的日期。 我的问题是 INSERT INTO `phpc_occurrences` SET `eid` = '15', `time_type` = '0', `start_ts` = FROM_UNIXTIME('1479189600'), `end_ts` = FROM_UNIXTIME('1479232800'); 1479189600应该返回2016年11月15日星期二06:00:00 GM

我只是使用FROM_UNIXTIME插入MySQL,但它给出了错误的日期。 我的问题是

INSERT INTO `phpc_occurrences`
SET `eid` = '15', 
    `time_type` = '0', 
    `start_ts` = FROM_UNIXTIME('1479189600'), 
     `end_ts` = FROM_UNIXTIME('1479232800');
1479189600应该返回
2016年11月15日星期二06:00:00 GMT
,但我的本地MySQL数据库返回
2016年11月15日星期二13:00:00 GMT

我的电脑时区是UTC+7,但我已经将其更改为UTC 0,MySQL的日期仍然返回错误的值


有人能解释一下发生了什么吗?

请确保将时区变量更新为GMT。例如,我当前的时区是GMT+03,因此我得到:

select FROM_UNIXTIME('1479189600');
+-----------------------------+
| FROM_UNIXTIME('1479189600') |
+-----------------------------+
| 2016-11-15 09:00:00         |
+-----------------------------+
但将时区更改为UTC(GMT)值会产生其他结果:

set time_zone='+00:00';
select FROM_UNIXTIME('1479189600');
+-----------------------------+
| FROM_UNIXTIME('1479189600') |
+-----------------------------+
| 2016-11-15 06:00:00         |
+-----------------------------+
也许mysql没有用你的系统时区更新它的内部时区变量


此外,还应注意字段“开始”和“结束”是否具有时间戳类型。如果是这样的话,在插入到表中时就不必担心时间戳了,这只在您选择一些数据时才重要,因为您的mysql客户端实际上会将时间戳值(实际上只是一个int32)转换为您当前的本地时间,所以您需要向db客户端提示所需的时区。

mysql使用服务器的时区,不是客户的时区。