Php MySQL时区查询

Php MySQL时区查询,php,mysql,timezone,Php,Mysql,Timezone,我有两个字段:time\u scan\u start和time\u scan\u end(时间戳字段) 当我用PDO打开与MySQL的连接时,我使用SET NAMES utf8,time_zone=“+0:00” 现在,当我在MySQL中进行查询时,我必须使用UTC时间WHERE time\u scan\u start>=UTC还是需要使用PHP本地区域?MySQL会自己做调整吗 我用gmdate和date做了一些测试,有时有效,有时无效 谢谢如果要与时间戳字段进行比较,则需要使用服务器时区中的

我有两个字段:
time\u scan\u start
time\u scan\u end
(时间戳字段)

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

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

我用gmdate和date做了一些测试,有时有效,有时无效


谢谢

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

SELECT @@time_zone;
因此,如果你已经执行了

SET NAMES time_zone = "+0:00";
然后您将使用基于UTC的值

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

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


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

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

SELECT @@time_zone;
因此,如果你已经执行了

SET NAMES time_zone = "+0:00";
然后您将使用基于UTC的值

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

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


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

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


然后,对搜索执行相同的操作,即在搜索中使用这些值之前将其转换为UTC。

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


然后,对搜索执行同样的操作,即在搜索中使用之前将值转换为UTC。

标准mysql时间字符串没有TZ数据,因此执行
time\u scan\u start>='2012-11-02 03:04:05'
将假定时区都匹配,只需直接比较值即可。只有在您进行涉及tz值的转换/格式化时,tz内容才会起作用。@MarcB好的,谢谢!因此,无论我在WHERE中输入什么,它都会假设WHERE日期是确定的,并且假设是UTC(如果MySQL设置为UTC+00:00)?标准MySQL时间字符串没有TZ数据,因此执行
time\u scan\u start>='2012-11-02 03:04:05'
将假设时区都匹配,只需直接比较值。只有在您进行涉及tz值的转换/格式化时,tz内容才会起作用。@MarcB好的,谢谢!因此,无论我在WHERE中输入什么,它都会假设WHERE日期是确定的,并且假设是UTC(如果MySQL设置为UTC+00:00),进行搜索?