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服务器上执行,时间戳是特意硬编码的。