date、datetime 的區別
- 顧名思義,date 日期,datetime 日期時間,所以 date 是 datetime 的日期部分
- MySQL 以 YYYY-MM-DD hh:mm:ss 格式檢索和顯示 datetime 值
datetime 支持的日期時間范圍
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
datetime 和 timestamp 的區別一:時間范圍
- 它們都是以 YYYY-MM-DD hh:mm:ss 格式檢索和顯示日期時間
- 第一個區別是 timestamp 支持的日期時間范圍不如 datetime 大
timestamp 支持的日期時間范圍
是 UTC 時間
'1970-01-01 00:00:01' UTC - '2038-01-19 03:14:07' UTC
什么是 UTC
協調世界時間,世界統一時間,世界標准時間,國際協調時間
datetime 或 timestamp 值可以包括尾部小數秒部分
- 精度最高可達微秒(6 位小數位)
- 插入到 datetime 或 timestamp 列的值中的任何小數部分都會被保留而不是被丟棄
- 保留小數部分后,格式變成 YYYY-MM-DD hh:mm:ss[.fraction]
datetime 值的范圍變成
1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999
timestamp 值的范圍變成
1970-01-01 00:00:01.000000 ~ 2038-01-19 03:14:07.999999
datetime 和 timestamp 區別二:時區
- 因為 timestamp 存儲的是 UTC 時間,所以會有時區的概念,這也是區別於 datetime 地方之一
- MySQL 對於 timestamp 字段值,會將客戶端插入的時間從當前時區轉換為 UTC 再進行存儲;查詢時,會從 UTC 轉換回客戶端當前時區再進行返回
- 默認情況下,每個連接的當前時區是服務器的時間
- 可以在每個連接的基礎上設置時區,只要時區設置保持不變,該 timestamp 字段讀寫的值就會保持一致
和 datetime 的區別
datetime 沒有時區概念,客戶端傳什么時間就存什么時間,省去了轉換時區的步驟
datetime 和 timestamp 區別三:字節數
datetime 和 timestamp 存儲的都是二進制而不是字符串
- timestamp:4 個字節
- datetime:5 個字節(有些教程會寫 8 個,但官方文檔目前 mysql8 中 datetime 是 5 個字節進行存儲)
重點
- 它們在保存小數秒時,都將使用額外的空間(1-3 個字節)
- 如果存儲 150w 條記錄,1 個字節的差異可以忽略不計
- 150 萬條記錄 * 每條記錄 1 個額外字節/(1048576 字節/MB)= 1.43 MB
timestamp 節省一個字節是有代價的
- 最開始也說了,timestamp 只能存儲 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999' 的值
- 但 datetime 可以存儲 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999' 的任何值