【问题标题】:MySQL datetime vs TIMESTAMP with time zonesMySQL datetime vs TIMESTAMP with time zone
【发布时间】:2013-06-07 21:20:28
【问题描述】:

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

SET time_zone = "-05:00"

我有一个表 test 有 2 个字段: date_add => 日期时间 date_upd => 时间戳

MySQL NOW()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 |
+---------------------+---------------------+

不确定这两个字段是否只是设置为不同的时区是怎么回事,如果有任何帮助,将不胜感激...谢谢

【问题讨论】:

    标签: mysql timezone timestamp


    【解决方案1】:

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

    【讨论】:

    • 详细说明.. MySQL now()current_timestamp() 是同义词,格式为“YYYY-MM-DD HH:MM:SS”。但由于timestamp 以UTC 存储时区,它会自动转换(使用您的日期/时间数据)到UTC。
    【解决方案2】:

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

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

    【讨论】:

    • 我理解这一点,但是为什么当我查询它时,在设置时区后,时间匹配。但是,如果我在不设置时区的情况下查询它,它们不会?
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2023-01-10
      • 2012-04-04
      • 2020-09-20
      • 2011-03-14
      • 2021-08-24
      • 1970-01-01
      • 2012-01-07
      • 2011-05-03
      相关资源
      最近更新 更多