我有一个sql查询,其中有这样的语句:
WHERE event.`local_time` > NOW()
local_time
是事件场地所在的时区的非UTC日期。这似乎在我本地的应用程序构建中非常有效,但是在部署环境中,我们从UTC获得了5小时的偏移(事件实际上发生了五个小时才能实际发生的五个小时)。
这里发生了什么?
我尝试了这样的事情:
WHERE CONVERT_TZ(event.`local_time`, venue.timezone, 'UTC') < NOW()
,但这似乎每次都会返回零行。(注意:我们的时区被存储为"美国/new_york")
任何见解都将不胜感激,但尤其是对我本地机器和我们部署环境之间差异的任何解释都会非常有帮助。
谢谢!
看起来您打算使用名为时区(" venue.timezone")。确保" mysql.time_zone"表在两端都以相同的方式填充。
测试是否将时区信息加载到mysql中:select(),convert_tz(now(),'utc','America/new_york');如果您在第二列中获得零 - 没有加载时区。
对于Linux,您可以通过:mysql_tzinfo_to_sql/usr/share/Zoneinfo |mysql -u u_s_e_r -p mysql
再次测试双方。
确保两个位置在以下查询中产生的结果是相同的:
SELECT @@global.time_zone, @@session.time_zone;
如果不是,您可以使用以下方式设置全局时区:
SET GLOBAL time_zone = timezone;
or
per connection with:
SET time_zone = timezone;
检查MySQL文档中的时区主题(为您的情况选择适当的MySQL版本)。