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/