首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TimeZone设置不正确

问TimeZone设置不正确
EN

Stack Overflow用户
提问于 2015-01-09 23:10:12
回答 2查看 82关注 0票数 0

我有一个问题,我在PHP中使用mysql,我的数据库中有时间戳列,这些列在更新时由当前时间戳自动设置。但是,当我试图向表中插入行时,添加的行的时间戳不同于我的当前时间(两小时前),我使用的是EST时区。

我已经检查了数据库的时区,它是系统,当我搜索它时,我读到它依赖于连接的机器,但我的机器有美国东部时间,所以有人能解释我为什么有这个时间吗?如何才能将数据库的当前时间戳设置为EST?

EN

回答 2

Stack Overflow用户

发布于 2015-01-09 23:21:50

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

类似于:

代码语言:javascript
复制
date_default_timezone_set('America/New_York'); 
$curtimestamp = date('Y-m-d G:i:s', time());

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

票数 0
EN

Stack Overflow用户

发布于 2015-01-09 23:40:58

文档可能还不清楚。

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

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

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

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

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

代码语言:javascript
复制
SET time_zone=CST6CDT

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

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

代码语言:javascript
复制
SET GLOBAL time_zone=

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

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

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27863549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档