MySQL複習拾遺之一:date、time、datetime
總所周知,MySQL日期和時間的類型有多個,與Java中類似,有date、datetime、time、timestamp和year。那麼,如何區分各種事件類型?在使用時該選擇哪種事件類型?
其中:
date有日期部分沒有時間部分;
time有時間部分沒有日期部分;
datetime有日期和時間部分;
timestamp有日期和時間部分;
year只有年份部分。
具體如下:
date: "yyyy-MM-dd"格式表示的日期值,"1000-01-01"到"9999-12-31",佔3個位元組;
time: "HH:mm:ss"格式表示的時間值,"-838:59:59"到"838:59:59",佔3個位元組;
datetime: "yyyy-MM-dd HH:mm:ss"格式,"1000-01-01 00:00:00"到"9999-12-31 23:59:59",佔8個位元組;
Advertisements
timestamp: "yyyyMMddHHmmss"格式表示的時間戳,"19700101000000"到"2037年的某個時刻",佔4個位元組;
year: "yyyy"格式的年份,"1901"到"2155",佔1個位元組;
使用場景
date
要使用日期部分,而不關心時間部分時,建議使用date類型。
比如要統計某一天內某文章的點擊量,則可以以「日」為單位,應該使用date類型。如「2017-06-26」。
time
要使用日期部分,而不關心日期部分時,建議使用time類型。如「22:59:59」。
datetime
既要使用日期部分又要使用時間部分時,我們可以使用datetime類型。比如,在發表文章時,需要記錄文章的發布的時間,則可以使用datetime類型。如「2017-06-26 22:59:59」。
Advertisements
timestamp
既要使用日期部分又要使用時間部分時,我們也可以使用timestamp類型。比如,在發表文章時,需要記錄文章的發布的時間,則也可以使用timestamp類型。如「20170626225959」。
year
只關心某一年的數據時,我們可以使用year類型。比如要統計2017年所有的點擊量。則可以使用year,如「2017」。
datetime和timestamp
從上面可以看到,datetime和timestamp都擁有日期和事件部分,都可以用來定位到某一秒的時刻。那麼什麼時候該使用datetime?什麼時候該使用timestamp?
我們來看看MySQL官方給出的建議:
這句話的意思是說:
所以,我們一般在使用MySQL時,都會用一個update_time欄位來表示當前記錄的更新時間,用一個欄位create_time來表示當前記錄的創建時間。由於一條記錄只會被創建一次,所以create_time我們一般使用datetime類型。而update_time則使用timestamp類型。
datetime和timestamp還有一個最重要的區別:timestamp帶有時區,而datetime沒有時區,datetime只是一個固定的時間。
Java日期和時間插入MySQL中
我們在使用Java與MySQL交互時,如果直接把Java日期對象插入到MySQL資料庫中,需要注意一些坑,如:
Java中java.sql.Date類型對應MySQL的date類型,java.sql.Time類型對應MySQL的time類型,java.sql.Timestamp類型對應MySQL的timestamp類型。如果Java中的該欄位的類型包含了MySQL中該欄位的類型,則插入可以成功,否則會報錯。
MySQL日期和時間讀取到Java
與插入類似,也要注意一些坑,如:
對於MySQL中所有的日期類型,都可以讀取到Java對應的日期時間欄位上而不會報錯,只會把缺少的部分使用曆元來填充。