MySQL 的 DATETIME 和 TIMESTAMP 数据类型有什么区别?


这两种数据类型都以“YYYY-MM-DD HH:MM:SS”格式存储数据,并且包含日期和时间。尽管有这些相似之处,但它们仍然存在以下差异:

  • 范围 - Datetime 数据类型支持介于 1000-01-01 00:00:00 和 9999-12-31 23:59:59 之间的日期和时间。但是,timestamp 数据类型支持介于 '1970-01-01 00:00:01' 和 '2038-01-19 08:44:07' 之间的日期和时间。
  • 大小 - Datetime 需要 5 个字节,以及用于存储小数秒数据的额外 3 个字节。另一方面,timestamp 数据类型需要 4 个字节,以及用于存储小数秒数据的额外 3 个字节。但在 MySQL 5.6.4 之前,DateTime 需要 8 个字节,以及用于存储小数秒数据的额外 3 个字节。
  • 从一个时区转换为另一个时区 - 实际上在 MySQL5+ 中,timestamp 值会从当前时间转换为 UTC,反之亦然,而 datetime 则不会进行任何转换。
  • 索引 - 可以对 timestamp 数据进行索引,但不能对 datetime 数据进行索引。
  • 查询缓存 - 具有 timestamp 数据类型的查询可以被缓存,但具有 datetime 数据类型的查询不能被缓存。

以上是 DATETIME 和 TIMESTAMP 数据类型之间的一些主要区别,以下示例将演示它:

示例

mysql> Create table test_datetime(time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.44 sec)

mysql> INSERT INTO test_datetime (time) values (CURRENT_TIMESTAMP);
Query OK, 1 row affected (0.04 sec)

mysql> Select * from test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+
1 row in set (0.00 sec)

mysql> Create table test_timestamp(time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Query OK, 0 rows affected (0.64 sec)

mysql> INSERT INTO test_timestamp (time) values (CURRENT_TIMESTAMP);
Query OK, 1 row affected (0.06 sec)

mysql> Select * from test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:50 |
+---------------------+
1 row in set (0.00 sec)

现在,在以下查询中,我们将时区更改为 UTC-05:00,并且对于具有 TIMESTAMP 数据类型的表,结果发生了更改。

mysql> SET @@session.time_zone = '-5:00';
Query OK, 0 rows affected (0.00 sec)

mysql> Select * from test_timestamp;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 06:59:50 |
+---------------------+
1 row in set (0.00 sec)

输出

mysql> Select * from test_datetime;
+---------------------+
| time                |
+---------------------+
| 2017-11-14 17:29:03 |
+---------------------+
1 row in set (0.00 sec)

更新于: 2020年6月19日

10K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告