gpt4 book ai didi

mysql - 为什么服务器的时区会影响 MySQL 对 FROM_UNIXTIME 纪元的读取?

转载 作者:太空宇宙 更新时间:2023-11-03 11:40:33 25 4
gpt4 key购买 nike

我认为,如果您向 MySQL 传递一个 Epoch 时间戳(很长)并使用 FROM_UNIXTIME() 将其作为可比日期,那么服务器的时区就无关紧要了。但确实如此(至少在我们的设置中 - 我们需要特定的配置吗?)。

使用 MySQL 版本:mysql Ver 14.14 Distrib 5.5.48-37.8,for Linux (x86_64) using readline 5.1

我开始时将我的服务器设置为 UTC。

当我运行如下查询时:

SELECT COUNT(*) FROM Orders
WHERE startTime BETWEEN FROM_UNIXTIME(1486509895) AND FROM_UNIXTIME(1486596296);

我有 127 个订单。

然后我将时区切换为美国东部时间:

sudo mv /etc/localtime /etc/localtime.bak
sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
sudo service mysql3306 restart

然后我再次运行查询,这次我得到了 196 个订单!

为什么我的服务器的时区会影响它?纪元不应受此影响。

最佳答案

The documentation for FROM_UNIXTIMESTAMP()明确指出:

Returns a representation of the unix_timestamp argument as a value in YYYY-MM-DD HH:MM:SS or YYYYMMDDHHMMSS format, depending on whether the function is used in a string or numeric context. The value is expressed in the current time zone. unix_timestamp is an internal timestamp value such as is produced by the UNIX_TIMESTAMP() function.

这就是为什么我强烈建议您以 UTC 运行服务器并在您的应用程序中进行任何转换或通过为您的查询指定偏移量来进行转换。

纪元时间(例如 UNIX time_t)以 UTC 表示,但如果您在环境中指定了时区,则始终以本地时间呈现,无论是 MySQL或其他。原始数值不会根据您的时区而改变,实际上它根本没有时区的概念,但是绝对可以将其转换为 YYYY-MM-DD 格式的字符串需要一个时区来呈现任何有意义的东西。

关于mysql - 为什么服务器的时区会影响 MySQL 对 FROM_UNIXTIME 纪元的读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42125543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com