Mysql - date、datetime、timestamp 的區別

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' 的任何值

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章