MySQL複習拾遺之一:date、time、datetime

總所周知,MySQL日期和時間的類型有多個,與Java中類似,有date、datetime、time、timestamp和year。那麼,如何區分各種事件類型?在使用時該選擇哪種事件類型?

其中:

  1. date有日期部分沒有時間部分;

  2. time有時間部分沒有日期部分;

  3. datetime有日期和時間部分;

  4. timestamp有日期和時間部分;

  5. year只有年份部分。

具體如下:

  1. date: "yyyy-MM-dd"格式表示的日期值,"1000-01-01"到"9999-12-31",佔3個位元組;

  2. time: "HH:mm:ss"格式表示的時間值,"-838:59:59"到"838:59:59",佔3個位元組;

  3. datetime: "yyyy-MM-dd HH:mm:ss"格式,"1000-01-01 00:00:00"到"9999-12-31 23:59:59",佔8個位元組;

    Advertisements

  4. timestamp: "yyyyMMddHHmmss"格式表示的時間戳,"19700101000000"到"2037年的某個時刻",佔4個位元組;

  5. 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對應的日期時間欄位上而不會報錯,只會把缺少的部分使用曆元來填充。

Advertisements

你可能會喜歡