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)
廣告