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中,没有任何时区信息,并且在显示(或比较)之前不会转换。MySQLDATETIME
对时区一无所知。因此,您需要决定哪个时区将是您的“默认”(通常是UTC),并使用该时区存储所有时间戳,必要时使用CONVERT_z
然后,对搜索执行相同的操作,即在搜索中使用这些值之前将其转换为UTC。MySQLDATETIME
对时区一无所知。因此,您需要决定哪个时区将是您的“默认”(通常是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),进行搜索?