兩種數據類型都以“YYYY-MM-DD HH:MM:SS”格式存儲數據,并包含日期和時間。盡管有這些相似之處,但它們還是有以下區別 –
- 范圍 – 日期時間數據類型支持 1000 之間的日期和時間-01-01 00:00:00 和 9999-12-31 23:59:59。但時間戳數據類型支持“1970-01-01 00:00:01”到“2038-01-19 08:44:07”之間的日期和時間。大小 – 日期時間需要 5 個字節以及 3 個附加字節用于小數秒的數據存儲。另一方面,時間戳數據類型需要 4 個字節以及 3 個附加字節用于小數秒的數據存儲。但在 MySQL 5.6.4 之前,DateTime 需要 8 個字節以及 3 個額外字節用于小數秒的數據存儲。從一個時區到另一個時區的轉換 – 實際上在 MySQL5+ 中,時間戳值從當前時間轉換為 UTC,反之亦然,而日期時間不進行任何轉換。索引 – 可以對時間戳數據進行索引,但無法對日期時間數據進行索引。索引 – 可以對時間戳數據進行索引,但不能對日期時間數據進行索引。 li>查詢緩存 – 可以緩存時間戳數據類型的查詢,但不能緩存日期時間數據類型的查詢。
以上是 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)
登錄后復制
以上就是MySQL DATETIME 和 TIMESTAMP 數據類型有什么區別?的詳細內容,更多請關注www.92cms.cn其它相關文章!






