MySQL和PHP时区

MySQL和PHP时区,php,mysql,phpmyadmin,Php,Mysql,Phpmyadmin,在我的PHP.ini文件中,我像这样设置时区 'America/New_York' 所以当我运行一个简单的php Date()函数时 我根据“我的”系统时间得到了正确的日期时间,因为这是我要比较的,我也想存储在我的MySQL数据库中。(据PHP报道) 现在的问题是,我将一个MySQL数据库导出为PDF格式,只是为了看看它是什么样子,时间是1小时前的,例如。。当时是(上午10:00),PDF页脚上写着(上午9:00) 所以。。我开始想。。我的PHP脚本将在数据库中插入我需要的正确日期时间。。但

在我的
PHP.ini
文件中,我像这样设置时区

'America/New_York'
所以当我运行一个简单的php Date()函数时

我根据“我的”系统时间得到了正确的日期时间,因为这是我要比较的,我也想存储在我的MySQL数据库中。(据PHP报道)

现在的问题是,我将一个MySQL数据库导出为PDF格式,只是为了看看它是什么样子,时间是1小时前的,例如。。当时是(上午10:00),PDF页脚上写着(上午9:00)


所以。。我开始想。。我的PHP脚本将
在数据库中插入我需要的正确日期时间。。但我有很多约会时间比较账户

我知道如果我在phpMyAdmin中运行任何MySQL查询,那么我将得到错误的日期时间

我已尝试在(phpMyAdmin SQL查询)中运行

但是当我运行查询时

SELECT @@global.time_zone, @@session.time_zone;
我回到
SYSTEM
SYSTEM

(我还应该提到我在共享主机上)

如果我在查询中使用MySQL
NOW()
函数,输入数据库的时间将由MySQL根据自己的时区计算

像这样

mysql_query("INSERT INTO table (id, value, time_created) 
                        VALUES ('{$id}', '{$value}', NOW())");
我知道我必须用PHP进行所有的插入和比较,以保持时间正确。。但是,使用上述方法,它将插入错误的时间

这就是我的困境

但这会影响到我没有预见到的事情吗?我只是觉得这会影响我的生活


那么,我怎样才能绕过这个问题,或者在同一时区使用MySQL呢?并确保我的所有日期/时间都正确,而不是延迟1小时。

根据您可以做什么和不可以做什么(在共享主机上),您可以选择使用以下语句作为所有查询的开始:
“set time_zone=”-05:00“
,例如:
“set time_zone=”-05:00“;从bar中选择foo;”
or(可能是最可靠的选项):仅在表和查询中使用时间戳,并根据收到的时间戳在PHP中创建DateTime对象

通过PhpMyAdmin连续运行的两个查询将在两个单独的会话(连接)中执行,因此
SELECT@@session。仅时区将始终返回“SYSTEM”

我怀疑您是否可以(我希望您不能)更改共享服务器上的全局时区,因此始终希望
SELECT@@global.time\u zone
使用“SYSTEM”。另一方面,您应该能够更改会话的时区

尝试在一次执行中运行这两个查询,它将显示新的时区:

SET time_zone = '-05:00'; SELECT @@session.time_zone; -- same session


NOW()
返回当前会话时区中的时间,因此时区很重要。不过,我更愿意将时间存储在GMT时区,但我想这更多是一个品味问题。

可能有点像夏令时,我只是觉得您的代码应该将会话时区更改得很好:。具体如何运行它?谢谢,确保PHP负责设置所有的日期/时间并将它们存储在$vars中可能更容易,然后只需插入它作为数据,而不是DateTime或TIMESTAMP。与
DateTime
值不同,MySQL将
TIMESTAMP
值转换为会话的时区或会话的时区。
mysql_query("INSERT INTO table (id, value, time_created) 
                        VALUES ('{$id}', '{$value}', NOW())");
SET time_zone = '-05:00'; SELECT @@session.time_zone; -- same session