MySQL NOW() 似乎正确地与我机器上的本地日期时间进行了比较,但在部署时却没有
MySQL NOW() seems to correctly compare against a local datetime on my machine, but not on deployment
我有一个 SQL 查询,其中的 where 语句如下:
WHERE event.`local_time` > NOW()
其中 local_time
是活动地点所在时区的非 UTC 日期时间。这似乎在我本地构建的应用程序上完美运行,但在部署环境中,我们与 UTC 有 5 小时的偏差(事件发生时间比实际发生时间早 5 小时)。
这是怎么回事?
我试过这样的事情:
WHERE CONVERT_TZ(event.`local_time`, venue.timezone, 'UTC') < NOW()
但这似乎每次都是 return 零行。 (注意:我们的时区存储为 'America/New_York')
任何见解将不胜感激,但特别是对我的本地计算机与我们的部署环境之间的差异的任何解释都将非常有帮助。
谢谢!
确保以下查询的两个地方的结果相同:
SELECT @@global.time_zone, @@session.time_zone;
如果不是,您可以随时设置全球时区:
SET GLOBAL time_zone = timezone;
or
per connection with:
SET time_zone = timezone;
检查 MySQL docs 时区主题(为您的案例选择合适的 MySQL 版本)。
您似乎打算使用命名时区 ("venue.timezone")。确保 "mysql.time_zone" table 在两端以相同的方式填充。
测试时区信息是否加载到 MySQL:
select现在(),CONVERT_TZ(现在(),'UTC','America/New_York');
如果您在第二列中得到 NULL - 您没有加载时区。
对于 Linux,您可以通过以下操作在 mysql 数据库中填充与时区相关的 tables:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u U_S_E_R -p mysql
再次测试双方。
我有一个 SQL 查询,其中的 where 语句如下:
WHERE event.`local_time` > NOW()
其中 local_time
是活动地点所在时区的非 UTC 日期时间。这似乎在我本地构建的应用程序上完美运行,但在部署环境中,我们与 UTC 有 5 小时的偏差(事件发生时间比实际发生时间早 5 小时)。
这是怎么回事?
我试过这样的事情:
WHERE CONVERT_TZ(event.`local_time`, venue.timezone, 'UTC') < NOW()
但这似乎每次都是 return 零行。 (注意:我们的时区存储为 'America/New_York')
任何见解将不胜感激,但特别是对我的本地计算机与我们的部署环境之间的差异的任何解释都将非常有帮助。
谢谢!
确保以下查询的两个地方的结果相同:
SELECT @@global.time_zone, @@session.time_zone;
如果不是,您可以随时设置全球时区:
SET GLOBAL time_zone = timezone;
or
per connection with:
SET time_zone = timezone;
检查 MySQL docs 时区主题(为您的案例选择合适的 MySQL 版本)。
您似乎打算使用命名时区 ("venue.timezone")。确保 "mysql.time_zone" table 在两端以相同的方式填充。
测试时区信息是否加载到 MySQL: select现在(),CONVERT_TZ(现在(),'UTC','America/New_York'); 如果您在第二列中得到 NULL - 您没有加载时区。
对于 Linux,您可以通过以下操作在 mysql 数据库中填充与时区相关的 tables: mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u U_S_E_R -p mysql
再次测试双方。