在后端開發(fā)中經常會碰到涉及數據庫的場景,不知道屏幕前的你有這樣的疑惑沒有,每每在遇到時間、日期字段總是讓人頭疼,分不清到底是選date還是datetime,亦或是timestamp,真是抓耳撓腮啊,怎么辦吶,大都翻看之前的表結構,把之前的時間、日期類型抄過來,草草了事。以至于在后面的開發(fā)中總是為時間、日期類型做特殊處理,過后便不再理會這事了,今天就把這事一次性說明白。
1.mysql時間戳
在mysql中表示日期和時間的數據類型,大體上有下面幾種,
名稱 |
定義方式 |
格式 |
范圍 |
date |
date |
YYYY-MM-DD |
'1000-01-01' to '9999-12-31' |
time |
time[.fraction] |
hh:mm:ss[.000000] |
'-838:59:59.000000' to '838:59:59.000000' |
datetime |
datetime[.fraction] |
YYYY-MM-DD hh:mm:ss[.000000] |
'1000-01-01 00:00:00' to '9999-12-31 23:59:59' |
timestamp |
timestamp[.fraction] |
YYYY-MM-DD hh:mm:ss[.000000] |
'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC |
year |
year |
YYYY |
'1901' to '2155' |
注意在上面的表格中,我把日期和時間分開進行了描述,主要是因為在很多場景中很容易把這兩個詞當作同一個意思,在這里時間指的時分秒,日期指的是年月日。
比較常用的有date、datetime、timestamp,今天就對這三種表示日期和時間的類型進行分析,看下在實際開發(fā)過程中如何選擇?
2.日期/時間類型
(1)date
date僅包含日期,mysql存儲和顯示的格式是'YYYY-MM-DD',可以表示的范圍是'1000-01-01' to '9999-12-31'
(2)datetime
datetime包含日期、時間兩部分,mysql存儲和顯示的格式是'YYYY-MM-DD hh:mm:ss',可以表示的范圍是'1000-01-01 00:00:00' to '9999-12-31 23:59:59'
(3)timestamp
timestamp包含日期、時間兩部分,在存儲時存儲的是時間戳,可以表示的范圍是'1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC,這里需要注意timestamp是有時區(qū)概念的,該類型可跟隨時區(qū)變化,默認情況下是服務器的時區(qū),如果一個數據庫連接設置了時區(qū)參數,那么該類型的值會根據連接設置的時區(qū)來存儲和返回值。
上面介紹了date、datetime、timestamp這三種數據類型,還有一個點需要著重強調,datetime、timestamp是可以有小數位的,一共可以有6位,所以在定義是可以是datetime(3),要說明的是默認情況下是datetime(0),由于是0所以通常情況下就倍省略了;
本文主要分享了,mysql中常見的日期、時間數據類型,下面幾條需謹記,datetime、timestamp都可以滿足需求的情況下,優(yōu)先選擇datetime,因為其表示的范圍更大;格式化方式為'YYYY-MM-DD hh:mm:ss[.000000]',在進行插入的時候使用的是相應的字符串的格式進行插入;自動初始化和更新語句要牢記,'dt datetime not null default current_timestamp on update current_timestamp';current_timestamp可以寫成current_timestamp(0);標識記錄的新增或更新時間的字段,設置為數據“default current_timestamp on update current_timestamp‘更省心;