自接觸學習MySQL已有一段時間了,對於MySQL的基礎知識仍是有必定的瞭解的。在這一路學習過來,每次無論看書仍是網上看的資料,對於MySQL數據類型中的時間日期類型老是一掃而過,未曾停下來認認真真的研究學習。最近在圖書館借了一本關於MysQL的書籍,打算全面的學習研究一遍。php
在以前,我對於時間日期數據類型不怎麼感冒,也沒怎麼用過這一類型。在個人作項目裏用到存貯時間的數據,我都是採用int整型數據類型來存儲,便是存儲時間戳。可是在後面學習MySQL優化的時候,就有一個原則就是存儲數據時應採用最小佔用空間的數據類型。int類型是4個字節,TIMESTAMP也是4個字節,可是在須要使用日期時,時間戳還須要進一步轉換,而TIMESTAMP類型數據就不須要了。數據庫
因此說認真學習瞭解每個知識點是必要的!函數
MySQL中有多種表示時間日期的數據類型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等。每一種數據類型都有存儲的時間日期格式、以及取值範圍,所以在使用時間日期數據類型的時候須要選取最佳的數據類型。學習
下圖列出了幾種數據類型:優化
一、YEARspa
year用於存儲年,存儲時只須要一個字節,插入數據時可使用各類格式指定YEAR值。blog
常見的插入格式解析:字符串
a、四位字符串或者數字格式,範圍爲「1901」~「2155」,多少即爲多少。get
b、兩位字符串格式,範圍爲「00」~「99」,"00"~"69"被轉化爲20**(例如:「16」轉化爲「2016」),「70」~「99」被轉化爲19**博客
c、兩位數字格式,範圍爲1~99,1~69被轉化爲20**(例如:1轉化爲2001),70~99被轉化爲19**
二、TIME
time用於存儲時間信息,存儲時須要三個字節。從上圖中能夠了解到time的存儲格式,還有數據範圍。其中HH小時大於一天的24小時,能夠爲八百多的數字。這是由於這個類型不只僅能夠用於存儲一天的某個時間還能夠記錄一段時間的間隔。因此小時就24小時。插入數據能夠有多種格式。
常見插入格式解析:
a、"D HH:MM:SS"格式字符串格式。還可使用非嚴格語法插入,例如「HH:MM:SS」、"D HH:SS"、「MM:SS」、"D HH"、」SS「(D表示天,取值範圍爲0~34)。在存入數據庫是D將會被轉換爲D*24+HH,最終將當作小時進行入庫存儲。
b、」HHMMSS「沒間隔的字符串格式或者HHMMSS沒間隔的數字格式,非嚴格語法插入能夠爲,MMSS、SS、」MMSS「等等。要注意的是:一、這兩種插入格式採用非嚴格語法的時候(即爲時分秒不完整,只有時分等等),最右邊的數據將默認爲秒數,例如插入2318時,最終入庫爲002318。 二、分鐘與秒數的數據要有實際意義,倘若·MM爲65超過59,那麼將會發生錯誤。
三、DATE
date用於存儲日期,沒有時間部分,存儲時須要三個字節。插入數據能夠有多種格式。
常見插入格式解析:
a、」YYYY-MM-DD「、"YYYYMMDD"。
b、」YY-MM-DD「、」YYMMDD「,以兩位數字來插入年份,這裏主要區別」00~69」與「70~99」,前者表示20**,後者表示19**。
c、數字格式YY-MM-DD、YYMMDD,兩位數字插入年份,區別於上面同樣。
d、使用函數插入,CURRENT_DATE()、NOW()
四、DATETIME
datetime用於存儲日期時間數據,存儲時須要八個字節。插入數據能夠有多種格式。
常見插入格式解析:
a、」YYYY-MM-DD HH:MM:SS「、"YYYYMMDDHHMMSS",最終插入數據庫都爲2017-01-17 23:55:59格式。
b、」YY-MM-DD HH:MM:SS「、"YYMMDDHHMMSS",兩位數字插入年份,主要區分「00~69」與「70~99」,區別於上面同樣。
c、數字格式插入,YYYYMMDDHHMMSS、YYMMDDHHMMSS,兩位數字插入年份問題與上述一致。
五、TIMESTAMP
timestamp用於存儲日期時間數據,與datetime存儲數據格式同樣,兩者主要區別在於取值範圍。timestamp存儲須要四個字節,它的取值範圍爲「1970-01-01 00:00:01」 UTC ~ 「2038-01-19 03:14:07」 UTC,而datetime取值範圍爲「1000-01-01 00:00:00」 ~ "9999-12-31 23:59:59"(UTC:Coordinated Universal Time 世界時間標準) 。插入格式也有多種。
常見插入格式解析:
與DATETIME一致,能夠參考上面。
瞭解MySQL的日期時間數據類型對於選取一種適合存儲類型是頗有必要的。倘若只有存儲年份能夠選取YEAR、僅存儲時間能夠選擇TIME、又或者須要存儲完整日期時間,那麼能夠根據實際狀況選取DATATIME或者TIMESTAMP數據類型。
(以上是本身的一些看法,如有不足或者錯誤的地方請各位指出)
做者:那一葉隨風
聲明:本博客文章爲原創,只表明本人在工做學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文連接。