MySQL的NOW()似乎正确地比较对我的计算机上的本地日期时间,而不是在部署
问题描述:
我有一个SQL查询,其中这样的语句:MySQL的NOW()似乎正确地比较对我的计算机上的本地日期时间,而不是在部署
其中WHERE event.`local_time` > NOW()
local_time
是一种非UTC日期时间为活动地点的时区。这似乎很适合我本地构建的应用程序,但在部署环境中,我们得到了UTC的5小时偏移量(事件发生在实际发生前五个小时)。
这是怎么回事吗?
我已经试过这样的事情:
WHERE CONVERT_TZ(event.`local_time`, venue.timezone, 'UTC') < NOW()
,但似乎返回任意时间均为零行。 (注意:我们的时区存储为'America/New_York')
任何洞察力都将非常感谢,但特别是对本地计算机和我们的部署环境之间差异的任何解释都会非常有帮助。
谢谢!
答
看起来你打算使用命名的时区(“venue.timezone”)。确保“mysql.time_zone”表在两端都以相同的方式填充。
要测试是否将时区信息加载到MySQL: 现在选择(),CONVERT_TZ(now(),'UTC','America/New_York'); 如果您在第二列中得到NULL - 您没有加载时区。
对于Linux,您可以通过执行以下操作在mysql数据库中填充与时区相关的表: 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 docs为时区主题(根据您的情况选择合适的MySQL版本)。
我得到SYSTEM,系统为我的本地构建和实时数据库 – tcmoore