我有两个数据库- 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;
有谁知道是什么原因导致了这个问题吗?我猜这个查询可能与时区有关……有什么方法可以改变吗?提前谢谢!
1条答案
按热度按时间5hcedyr01#
这两台机器原来有不同的系统时区,这可能会影响TIMESTAMP值的处理方式。仍在努力使查询不依赖于时区,但我会在另一个问题中发布。