三者之間的區別(mysql 5.6+)html
存儲範圍 | 佔用空間(字節) | 是否與時區相關 | 默認值 | 存儲方式 | 編碼方式mysql |
是否根據時區轉換 | |
---|---|---|---|---|---|---|---|
date | 1000-01-01sql 至數據庫 9999-12-31編碼 |
3 | 無關 | null | 二進制 | 1bit用來存符號位,表示正負 spa 1 bit sign (1= non-negative, 0= negative)htm 17bit用來存放年和月 5bit用來存放日 一共23bit約爲3個字節 |
否 |
datetime | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 |
5 當保存毫秒部分時使用額外的空間 (1到3 字節) |
無關 |
null | 二進制 | 1bit用來存符號位,表示正負 1 bit sign (1= non-negative, 0= negative) 17bit用來存放年和月 5bit用來存放日 5bit用來存放時 5bit用來存放分 5bit用來存放秒 一共40bit恰好5個字節 |
否 |
timestamp | 1970-01-01 00:00:00 至 2038-01-09 03:14:07 |
4 當保存毫秒部分時使用額外的空間 (1到3 字節) |
相關 |
CURRENT_TIMESTAMP(當前時間) 默認狀況下, insert、update 數據時,TIMESTAMP列會自動以當前時間填充/更新 |
二進制 | 存的是自【1970-01-01,UTC】以來的秒數。 |
是 |
PS:在5.6版本以後,datetime開始能夠使用current time做爲默認值,因此再也不有timestamp比datetime更適合做爲須要隨插入和更新來變動時間的類型的說法
date這個主要是表示日期的,用途上面沒有什麼須要抉擇的。
對於timestamp和datetime,道友們可能還有選擇困難症,在這裏我發表一下本身的見解:
在5.6+的mysql數據庫中,timestamp這個基本能夠棄用了,以datetime爲主。若是遇到跨時區的需求時,建議使用long或者bigint進行時間戳的存儲,而後在代碼中進行轉換,不建議用timestamp;
Mysql相關文檔:https://dev.mysql.com/doc/internals/en/date-and-time-data-type-representation.html
參考博文:https://juejin.im/entry/5b6fcb1b6fb9a009d15a2c5c