0

好的,我在 UTC 时区有一个 MySQL 数据库,我不想改变它(它是一个 AWS RDS)。我通过 php_mysqli 运行所有查询我在连接后使用以下设置时区:

SET time_zone = "-05:00"

我有一个test包含 2 个字段的表: date_add=> DATETIME date_upd=> TIMESTAMP

MySQLNOW()CURRENT_TIMESTAMP匹配并且在正确的时区。确认我的跑步:

SELECT NOW()
SELECT CURRENT_TIMESTAMP

当我运行以下命令时:

INSERT INTO `test` SET `date_add`=NOW()

然后

SELECT * FROM `test`

我得到匹配date_adddate_upd正确的时区

但是,当我在 CLI 或 phpMyAdmin 中查看原始表时,结果会有所不同,比如在不同的时区?

+---------------------+---------------------+
| date_add            | date_upd            |
+---------------------+---------------------+
| 2013-06-07 15:57:09 | 2013-06-07 20:57:09 |
+---------------------+---------------------+

不确定这两个字段是否只是设置为不同的时区是什么正在发生的任何帮助将不胜感激... thx

4

3 回答 3

1

那是因为 datetime 没有时区,而 timestamp 有时区。 http://dev.mysql.com/doc/refman/5.0/en/datetime.html

于 2014-12-01T09:55:15.457 回答
0

我的猜测是set timezone只设置本地环境变量,对实际保存的内容没有影响。它只会影响查询时的查看方式。

在 phpmyadmin 中你不会先做同样的设置,所以你会看到默认时区。

于 2013-06-07T21:31:27.333 回答
0

在 MySQL 中,时间戳实际上始终采用 UTC,即,当您将本地时区的时间戳插入 db 时,它会在数据库服务器上自动转换为 UTC。所以它在任何地方都是一致的。如果有不同时区的客户端,我建议您始终使用时间戳。时间戳也比日期时间更有效。

于 2015-05-31T01:30:58.713 回答