TIMESTAMP 字段类型与时区相关的行为是什么?
是否有任何时间戳值插入到该字段中按原样插入?
或者它是否假设插入的时间戳值的时区是服务器本地时间并将其转换为 UTC?
编辑:
这是我的测试
我运行了 PHP date() 和 MySQL 的 SELECT NOW(),它们输出的时间戳大致相同。两者的结果都不是 UTC 时间。
我尝试插入一个测试表,其中包含从 PHP date() 获取的 TIMESTAMP 字段的值
PHP date() 中的值应该已转换为 UTC。但是,我在数据库中看到的不是UTC。TIMESTAMP 字段的值按原样插入。
TIMESTAMP 值始终保存为 UTC。
MySQL 将 TIMESTAMP 从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。
默认时区将是服务器时区,可以在连接上设置。看到这个。
有关更多详细信息,请参阅MySQL 文档
我可以通过一个例子来解释这一点。请在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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5525 次 |
| 最近记录: |