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

时间:2012-10-18 09:26:02

标签: mysql

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

是否插入了按字段插入该字段的时间戳值?

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

编辑:

这是我的测试

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

  • 我尝试从PHP date()

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

2 个答案:

答案 0 :(得分:4)

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)

答案 1 :(得分:-4)

TIMESTAMP值按原样插入。