MySQL時間類型相關總結(DATETIME, TIMESTAMP, DATE, TIME, YEAR)
MySQL官方文檔:
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html
一. 對比:
在 MySQL 中,處理時間相關的數據類型主要有以下幾種:DATE、TIME、DATETIME、TIMESTAMP 和 YEAR。每種類型適用于不同的場景,并且它們之間有一些細微的差別。以下是這些時間類型的特性和比較:
-
DATE
格式:YYYY-MM-DD
范圍:1000-01-01 到 9999-12-31
用途:僅存儲日期,不包含時間部分。
精度:到天。 -
TIME
格式:HH:MM:SS
范圍:-838:59:59 到 838:59:59
用途:僅存儲時間,不包含日期部分。
精度:到秒。 -
DATETIME
格式:YYYY-MM-DD HH:MM:SS
范圍:1000-01-01 00:00:00 到 9999-12-31 23:59:59
用途:存儲日期和時間。
精度:到秒。
自動轉換:在 MySQL 5.6.4 及以上版本,DATETIME 可以指定小數秒的精度,最多到微秒(6位小數)。 -
TIMESTAMP
格式:YYYY-MM-DD HH:MM:SS
范圍:1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC
用途:存儲日期和時間,通常用于記錄“時間點”。
精度:到秒。在 MySQL 5.6.4 及以上版本,也可以指定小數秒的精度。
自動轉換:TIMESTAMP 值在插入時會根據服務器時區轉換為 UTC 存儲,在檢索時再轉換回時區。 -
YEAR
格式:YYYY 或 YY
范圍:1901 到 2155(對于 YYYY);70 到 69(對于 YY,代表 1970-2069)
用途:僅存儲年份。
精度:到年。
二. 比較和選擇:
精度:如果你需要存儲精確到秒的時間,DATETIME 和 TIMESTAMP 是合適的選擇。如果需要更高精度(如毫秒或微秒),可以在 MySQL 5.6.4 及以上版本中指定。
時區:如果你需要處理時區,TIMESTAMP 是更好的選擇,因為它會自動轉換為 UTC 存儲。
存儲需求:如果你只需要存儲日期或時間,使用 DATE 或 TIME 可以節省空間。
用途:根據你的具體需求選擇最合適的類型。例如,如果你需要記錄事件發生的具體時間點,TIMESTAMP 可能更合適。
三. 屬性展示:
四. 數據存儲展示:
ps:對應的sql腳本:
CREATE TABLE `test_time` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主鍵id',`time_datetime` datetime(6) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(6) COMMENT 'datetime類型',`time_timestamp` timestamp(6) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(6) COMMENT 'timestamp類型',`time_date` date DEFAULT NULL COMMENT 'date類型',`time_time` time(6) DEFAULT NULL COMMENT 'time類型',`time_year` year DEFAULT NULL COMMENT 'year類型',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;