2

我有两个字段:time_scan_starttime_scan_end(时间戳字段)。

当我使用 PDO 打开与 MySQL 的连接时,我使用SET NAMES utf8,time_zone = "+0:00";.

现在,当我在 MySQL 中进行查询时,我必须使用 UTC 时间WHERE time_scan_start >= UTC还是需要使用 PHP 本地区域?MySQL 会自行调整吗?

我用 gmdate 和 date 做了一些测试,有时它可以工作,其他的则不行。

谢谢

4

2 回答 2

2

如果要与TIMESTAMP字段进行比较,则需要使用服务器时区中的比较值。您可以通过以下方式确定服务器时区:

SELECT @@time_zone;

因此,如果你已经执行

SET NAMES time_zone = "+0:00";

那么您将使用基于 UTC 的值。

这是因为TIMESTAMP字段以 UTC 存储在 MySQL 中,并在显示(或比较)之前转换为服务器的时区。

注意:如果您要与DATETIME字段或TIME字段进行比较,则需要在与将值插入字段时使用的时区相同的时区中使用比较值。

这是因为DATETIMETIME字段存储在 MySQL 中没有任何时区信息,并且在显示(或比较)之前没有转换。

于 2012-11-02T23:49:13.077 回答
2

MySQLDATETIME对时区一无所知。因此,您需要决定哪个时区将是您的“默认”(通常是 UTC),并使用该时区存储所有时间戳,CONVERT_TZ如有必要,请使用。

然后,对搜索执行相同操作,即将值转换为 UTC,然后在搜索中使用它们。

于 2012-11-02T23:56:15.413 回答