时区设置不正确



我有一个问题,我正在使用mysql和PHP,并且我的数据库中有时间戳列,这些列在更新时会自动设置当前时间戳。但是当我尝试将行插入表中时,添加的时间戳与我当前时间(两小时之前)不同,我使用的是 EST 时区。

我已经检查了数据库的时区,它是 System,当我搜索它时,我读到它在正在连接的机器上消失了,但我的机器有 EST 时间,所以谁能解释为什么我有这个? 我该怎么做才能将数据库的当前时间戳设置为 EST?

个人发现在PHP中设置时区要可靠得多,然后在那里获取时间戳并将其传递给您的MySQL查询。

像这样:

date_default_timezone_set('America/New_York'); 
$curtimestamp = date('Y-m-d G:i:s', time());

然后在查询中使用 $curtimestamp 的值。

文档可能不清楚。

time_zone=SYSTEM意味着MySQL服务器时区派生自运行MySQL服务器的主机,而不是客户端系统。

因此,如果MySQL服务器主机上的时区与客户端主机上的时区不同,则可以解释您观察到的行为。


每个客户端(数据库会话)都有自己的time_zone设置。建立连接后,该设置派生自MySQL服务器的"默认"时区。

此变量的设置确定如何解释 DATETIME 和 TIMESTAMP 值、何时从客户端将值发送到数据库以及何时从数据库中提取现有值。

客户端可以发出 SET time_zone 语句来更改数据库会话的time_zone,例如

SET time_zone=CST6CDT

(请注意,若要对时区使用命名值,必须填充mysql数据库中的time_zone%表。

要设置将用于新数据库连接的"默认"time_zone,可以设置"全局"time_zone变量:

SET GLOBAL time_zone=

(此更改需要 SUPER 权限,并且会影响与整个实例的所有新数据库连接。通常,此值在MySQL服务器配置文件中设置。


对于TIMESTAMP列,MySQL将它们存储为UTC。 返回到客户端的值取决于客户端time_zone的设置。作为一个简单的演示:

mysql>     CREATE TABLE mytest
    ->     ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
    ->     , ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    ->     );
Query OK, 0 rows affected (0.11 sec)
mysql>     SHOW VARIABLES LIKE 'time_zone';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| time_zone     | +00:00 |
+---------------+--------+
1 row in set (0.00 sec)
mysql>     INSERT INTO mytest (id) VALUES (NULL);
Query OK, 1 row affected (0.00 sec)
mysql>     SELECT * FROM mytest;
+----+---------------------+
| id | ts                  |
+----+---------------------+
|  1 | 2015-01-09 15:41:25 |
+----+---------------------+
1 row in set (0.00 sec)
mysql>     SET time_zone = 'CST6CDT';
Query OK, 0 rows affected (0.00 sec)
mysql>     SELECT * FROM mytest;
+----+---------------------+
| id | ts                  |
+----+---------------------+
|  1 | 2015-01-09 09:41:25 |
+----+---------------------+
1 row in set (0.00 sec)
mysql>     INSERT INTO mytest (id) VALUES (NULL);
Query OK, 1 row affected (0.00 sec)
mysql>     SELECT * FROM mytest;
+----+---------------------+
| id | ts                  |
+----+---------------------+
|  1 | 2015-01-09 09:41:25 |
|  2 | 2015-01-09 09:41:25 |
+----+---------------------+
2 rows in set (0.00 sec)
mysql>     SET time_zone = 'EST5EDT';
Query OK, 0 rows affected (0.00 sec)
mysql>     SELECT * FROM mytest;
+----+---------------------+
| id | ts                  |
+----+---------------------+
|  1 | 2015-01-09 10:41:25 |
|  2 | 2015-01-09 10:41:25 |
+----+---------------------+
2 rows in set (0.00 sec)

相关内容

  • 没有找到相关文章

最新更新