我想使用以下代码来选择1分钟以前的数据。
SELECT * FROM `auth_temp` WHERE date > (NOW() - INTERVAL 1 MINUTE)
但它没有用。然后我检查了一些其他主题,一个人谈到了服务器时间,我刚问了我的主机,他说服务器时间是:15:30 在我的地方和MySQL中的日志是21:30,也就是6小时后。 任何人我应该如何调整我的代码呢?
谢谢大家!
答案 0 :(得分:1)
您正在遇到时区问题。大多数服务器都在UTC上运行如果您有TIMESTAMP
字段类型,MySQL会将服务器时间转换为UTC并返回。您可以使用SET time_zone = timezone;
(Docs)调整MySQL考虑服务器时间的内容。如果你真的关心时区,建议你只使用UTC并在应用程序中进行转换。
答案 1 :(得分:0)
您当前的SQL语句只会选择1分钟以内的数据。将其更改为:
SELECT * FROM auth_temp WHERE date < (NOW() - INTERVAL 1 MINUTE)
这将选择超过一分钟的数据。如果在插入行时使用NOW()
来设置日期列,那么即使应用程序和数据库层之间的时区不同,该小修补也应该这样做。如果您从应用程序层设置日期列,则如果时区的设置与数据库层不同,则会出现同步问题。
听起来MySQL服务器要么在不同的时区运行,要么在通用时间(UTC)上运行。在UTC时间运行MySQL是处理多个时区用户的好方法。在您的代码中,如果数据库和应用程序层设置为UTC时间,则应该能够同步使用的时区。如果将其设置为不同的时区,则应该也可以,但不建议使用。