MySQL NOW()似乎正确地与我的机器上的本地日期时间进行比较,但不是在部署上

时间:2016-12-06 19:29:43

标签: mysql datetime timezone utc timezone-offset

我有一个带有where语句的SQL查询:

WHERE event.`local_time` > NOW()

其中local_time是事件所在地时区的非UTC日期时间。这似乎在我的应用程序的本地构建上完美运行,但是在部署环境中,我们从UTC获得了5小时的偏移(事件发生在事件发生前五个小时)。

这里发生了什么?

我尝试过这样的事情:

WHERE CONVERT_TZ(event.`local_time`, venue.timezone, 'UTC') < NOW()

但这似乎每次都返回零行。 (注意:我们的时区存储为'America / New_York')

非常感谢任何见解,但特别是对我的本地计算机和部署环境之间的差异的任何解释都会非常有用。

谢谢!

2 个答案:

答案 0 :(得分:1)

确保以下查询的两个地方的结果相同:

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

如果不是,您可以将全局时区设置为:

SET GLOBAL time_zone = timezone;
or 
per connection with:
SET time_zone = timezone;

检查MySQL docs以获取时区主题(为您的案例选择合适的MySQL版本)。

答案 1 :(得分:1)

看起来您打算使用命名时区(“venue.timezone”)。确保在两端以相同的方式填充“mysql.time_zone”表。

测试时区信息是否加载到MySQL: select now(),CONVERT_TZ(now(),'UTC','America / New_York'); 如果在第二列中得到NULL - 则没有加载时区。

对于Linux,您可以通过执行以下操作来填充mysql DB中与时区相关的表: mysql_tzinfo_to_sql / usr / share / zoneinfo | mysql -u U_S_E_R -p mysql

再次测试双方。