mysql 相同的查询和返回不同结果的数据-与日期有关吗?

v8wbuo2f  于 2023-04-10  发布在  Mysql
关注(0)|答案(1)|浏览(125)

我有两个数据库- dev和staging。当我在这两个数据库中运行这个查询时,我在两个数据库中都得到了相同的结果-

SELECT COUNT(s.id)
FROM app_session_history s
WHERE DATE_SUB(s.loginTime, INTERVAL 6 HOUR) < NOW();

但是当我运行这个程序时,我得到了不同的结果-

SELECT COUNT(s.id)
FROM app_session_history s
JOIN app_project_usage_history p
ON s.user_id = p.user_id
WHERE DATE_SUB(s.loginTime, INTERVAL 6 HOUR) < p.created_at;

我知道数据是完全相同的,因为我在运行之前直接从生产环境导入它们。模式也是相同的。我复制并粘贴代码,所以这也是相同的。
loginTime值存储在Mountain Time中,这是一个更大的项目的一部分,该项目将它们转换为UTC,这就是created_at列所在的位置(这只是调整后的代码的一小部分)。
当我运行下面的查询时,它们都只是在staging和dev中显示“SYSTEM”,但我很确定staging是在UTC中,dev是在Mountain中。

SELECT @@global.time_zone;
SELECT @@session.time_zone;

有谁知道是什么原因导致了这个问题吗?我猜这个查询可能与时区有关……有什么方法可以改变吗?提前谢谢!

5hcedyr0

5hcedyr01#

这两台机器原来有不同的系统时区,这可能会影响TIMESTAMP值的处理方式。仍在努力使查询不依赖于时区,但我会在另一个问题中发布。

相关问题