我有两个字段:time_scan_start和time_scan_end(时间戳字段)。
当我使用 PDO 打开与 MySQL 的连接时,我使用SET NAMES utf8,time_zone = "+0:00";.
现在,当我在 MySQL 中进行查询时,我必须使用 UTC 时间WHERE time_scan_start >= UTC还是需要使用 PHP 本地区域?MySQL 会自行调整吗?
我用 gmdate 和 date 做了一些测试,有时它可以工作,其他的则不行。
谢谢
如果要与TIMESTAMP字段进行比较,则需要使用服务器时区中的比较值。您可以通过以下方式确定服务器时区:
SELECT @@time_zone;
因此,如果你已经执行
SET NAMES time_zone = "+0:00";
那么您将使用基于 UTC 的值。
这是因为TIMESTAMP字段以 UTC 存储在 MySQL 中,并在显示(或比较)之前转换为服务器的时区。
注意:如果您要与DATETIME字段或TIME字段进行比较,则需要在与将值插入字段时使用的时区相同的时区中使用比较值。
这是因为DATETIME和TIME字段存储在 MySQL 中没有任何时区信息,并且在显示(或比较)之前没有转换。
MySQLDATETIME对时区一无所知。因此,您需要决定哪个时区将是您的“默认”(通常是 UTC),并使用该时区存储所有时间戳,CONVERT_TZ如有必要,请使用。
然后,对搜索执行相同操作,即将值转换为 UTC,然后在搜索中使用它们。