gpt4 book ai didi

MySQL - TIMESTAMP 字段类型自动转换为 UTC?

转载 作者:可可西里 更新时间:2023-11-01 07:45:23 24 4
gpt4 key购买 nike

TIMESTAMP 字段类型与时区相关的行为是什么?

是否有任何时间戳值按原样插入该字段?

还是假设插入的时间戳值的时区是服务器本地时间并将其转换为 UTC?

编辑:

这是我的测试

  • 我同时运行了 PHP date() 和 MySQL 的 SELECT NOW(),它们输出的时间戳大致相等。两者的结果都不是 UTC 时间。

  • 我尝试使用从 PHP date() 获取的 TIMESTAMP 字段值插入测试表

  • PHP date() 的值应该已经转换为 UTC。但是,我在数据库中看到的不是 UTC。 TIMESTAMP 字段的值按原样插入。

最佳答案

TIMESTAMP 值始终保存为 UTC。

MySQL 将 TIMESTAMP 从当前时区转换为 UTC 进行存储,然后从 UTC 转换回当前时区进行检索。

默认时区将是服务器时区,可以在连接上设置。参见 this .

有关详细信息,请参阅 MySQL Doc

我可以通过一个例子来解释这一点。请在 mysql 控制台中执行查询:

mysql> CREATE TABLE `testtable` (
`date_timestamp` TIMESTAMP NOT NULL,
`date_datetime` DATETIME NOT NULL
)
ENGINE = InnoDB;
Query OK, 0 rows affected (0.06 sec)

mysql> SET time_zone = '+00:00';
Query OK, 0 rows affected (0.00 sec)

mysql> insert into testtable values(now(),now());
Query OK, 1 row affected (0.03 sec)

mysql> select * from testtable;
+---------------------+---------------------+
| date_timestamp | date_datetime |
+---------------------+---------------------+
| 2012-10-19 05:01:38 | 2012-10-19 05:01:38 |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> SET time_zone = '+05:30';
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> insert into testtable values(now(),now());
Query OK, 1 row affected (0.03 sec)

mysql> select * from testtable;
+---------------------+---------------------+
| date_timestamp | date_datetime |
+---------------------+---------------------+
| 2012-10-19 10:31:38 | 2012-10-19 05:01:38 |
| 2012-10-19 10:31:47 | 2012-10-19 10:31:47 |
+---------------------+---------------------+
2 rows in set (0.00 sec)

关于MySQL - TIMESTAMP 字段类型自动转换为 UTC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12951329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com