Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql FROM_UNIXTIME与日期_ADD与秒数不匹配_Mysql_Date - Fatal编程技术网

Mysql FROM_UNIXTIME与日期_ADD与秒数不匹配

Mysql FROM_UNIXTIME与日期_ADD与秒数不匹配,mysql,date,Mysql,Date,有人能解释一下为什么不同吗 SELECT FROM_UNIXTIME(547164000), DATE_ADD(FROM_UNIXTIME(0), INTERVAL 547164000 SECOND), @@session.time_zone 返回 1987-05-05 00:00:00 1987-05-04 23:00:00 SYSTEM 系统的时区为CEST,+0200(通过命令date+%z)获得) 我使用这个DATE\u ADD方法来处理负时间戳,因为FROM\u UNIX

有人能解释一下为什么不同吗

SELECT 
  FROM_UNIXTIME(547164000),
  DATE_ADD(FROM_UNIXTIME(0), INTERVAL 547164000 SECOND),
  @@session.time_zone
返回

1987-05-05 00:00:00
1987-05-04 23:00:00
SYSTEM
系统的时区为CEST,+0200(通过命令
date+%z
)获得)


我使用这个DATE\u ADD方法来处理负时间戳,因为FROM\u UNIXTIME不支持负值。

MySQL服务器可以设置自己的时区,这样它的行为就不会像PHP的time()。也就是说,将time()值存储到TIMESTAMP字段中,然后显示生成的格式化日期和时间可能不会给出预期的结果。您必须小心不要混合使用SQL和非SQL时间戳,而是坚持使用其中一种。我不清楚为什么这两个表达式会给出不同的结果,但可能会指出MySQL中的一个错误。您可能会认为,将N秒添加到0时间将得到与普通N时间相同的结果。。。你确定它们是在完全相同的时区和DST/夏令时规则下格式化的吗?

我无法解释,但运行设置时区=“+02:00”;似乎返回了预期的结果是的,它解决了它,谢谢。设置时区=‘系统’;这似乎是个问题。它看起来像是从_UNIXTIME和DATE _ADD使用不同的系统值?;)谢谢你的回答和提示。但请注意,此命令直接在MySql服务器上执行,时间戳是特意硬编码的。