MySQL 中的 DATETIME 與 TIMESTAMP 的比較
Mehvish Ashiq
2023年1月30日
DATETIME
和 TIMESTAMP
是兩種不同的資料型別,可用於儲存必須包含日期和時間部分的值。
在本文中,我們將瞭解它在資料庫中的儲存格式以及每種資料型別所需的記憶體。我們還將檢視兩種資料型別的異同,並嘗試通過示例來理解。
DATETIME
和 TIMESTAMP
的相似之處
DATETIME
和 TIMESTAMP
有一些相似之處,如下所示:
- 兩者都儲存相同型別的資料,具有兩部分(日期和時間)。
- 兩者在查詢時具有相同的格式。
- 儲存在資料庫中的格式相同(
YYYY-MM-DD hh:mm:ss
)。 - 兩者都需要額外的位元組來實現小數秒精度。
- 每當更新記錄時,兩者都可以使用當前日期和時間更改資料。
DATETIME
和 TIMESTAMP
的區別
DATETIME
和 TIMESTAMP
有以下區別:
DATETIME
和TIMESTAMP
分別需要 5 個位元組和 4 個位元組。TIMESTAMP
受時區影響,但DATETIME
保持不變。DATETIME
和TIMESTAMP
支援的範圍是'1000-01-01 00:00:00'
到'9999-12-31 23:59:59'
和'1970-01-01 00:00:01'UTC
到'2038-01-19 03:14:07' UTC
。DATETIME
不能被索引,而TIMESTAMP
可以。- 帶有
TIMESTAMP
的查詢將被快取,但DATETIME
不是這種情況。
瞭解 MySQL 中 DATETIME
和 TIMESTAMP
使用的示例
假設你在你的國家/地區經營一家咖啡店。每個客戶在支付賬單後都會收到一張發票。
除其他詳細資訊外,此發票還有日期和時間。由於你僅在你的所有客戶都在同一時區的國家/地區經營商店,因此你將使用 DATETIME
。
讓我們稍微改變一下這個場景;你現在在不同的國家有十家咖啡店,每個國家都有自己的時區。客戶也會在那裡收到發票,但是如何根據客戶的時區顯示日期和時間。
在這裡你將使用 TIMESTAMP
。為什麼?因為 TIMESTAMP
受時區影響,也就是說 TIMESTAMP
的值會從當前時區(伺服器時間)轉換為 UTC(通用時區)進行儲存,再返回到當前時區(伺服器時間) ) 關於檢索。
示例程式碼:
請在你的 MySQL 中執行以下程式碼(我們在本教程中使用 MySQL 8.0.27)並檢視程式碼後給出的輸出。
#create schema
CREATE SCHEMA db_practice_datetime_timestamp;
#create table
CREATE TABLE practice_datetime_and_timestamp (
ID INT AUTO_INCREMENT PRIMARY KEY,
DATE_TIME DATETIME,
TIME_STAMP TIMESTAMP
);
#insert data
INSERT INTO practice_datetime_and_timestamp(TIME_STAMP,DATE_TIME)
VALUES(NOW(),NOW());
#read data
SELECT DATE_TIME, TIME_STAMP from practice_datetime_and_timestamp;
輸出:
現在,執行下面給出的程式碼並檢視其輸出。
SET time_zone = '-05:00';
SELECT DATE_TIME, TIME_STAMP from practice_datetime_and_timestamp;
輸出:
你可能已經注意到 TIME_STAMP
列的時間已更改,但 DATE_TIME
的資料保持不變。
まとめ
在本次討論中,我們得出結論,DATETIME
和 TIMESTAMP
根據你的需要儲存相同的資料。如果你希望你的資料受時區影響,請選擇 TIMESTAMP
。否則,最好使用 DATETIME
。
作者: Mehvish Ashiq