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



我有两个数据库- 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值存储在山地时间中,这是一个更大的项目的一部分,将它们转换为UTC,这就是created_at列所在的位置(这只是一小段代码,在这里进行了调整以使其有意义)。

当我运行下面的查询时,它们都只显示"SYSTEM"在staging和dev中,但我很确定staging在UTC中,dev在Mountain中。

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

有谁知道是什么原因引起的吗?我猜查询在某种程度上取决于时区…有办法改变这一点吗?提前感谢!

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