一、博客前言
自接觸學習MySQL已有一段時間了,對於MySQL的基礎知識還是有一定的了解的。在這一路學習過來,每次不管看書還是網上看的資料,對於MySQL數據類型中的時間日期類型總是一掃而過,不曾停下來認認真真的研究學習。最近在圖書館借了一本關於MysQL的書籍,打算全面的學習研究一遍。
在之前,我對於時間日期數據類型不怎麼感冒,也沒怎麼用過這一類型。在我的做項目裡用到存貯時間的數據,我都是采用int整型數據類型來存儲,即是存儲時間戳。但是在後面學習MySQL優化的時候,就有一個原則就是存儲數據時應采用最小占用空間的數據類型。int類型是4個字節,TIMESTAMP也是4個字節,但是在需要使用日期時,時間戳還需要進一步轉換,而TIMESTAMP類型數據就不需要了。
所以說認真學習了解每一個知識點是必要的!
二、時間日期數據類型總概況
MySQL中有多種表示時間日期的數據類型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等。每一種數據類型都有存儲的時間日期格式、以及取值范圍,因此在使用時間日期數據類型的時候需要選取最佳的數據類型。
下圖列出了幾種數據類型:
三、細講
1、YEAR
year用於存儲年,存儲時只需要一個字節,插入數據時可以使用各種格式指定YEAR值。
常見的插入格式解析:
a、四位字符串或者數字格式,范圍為“1901”~“2155”,多少即為多少。
b、兩位字符串格式,范圍為“00”~“99”,"00"~"69"被轉化為20**(例如:“16”轉化為“2016”),“70”~“99”被轉化為19**
c、兩位數字格式,范圍為1~99,1~69被轉化為20**(例如:1轉化為2001),70~99被轉化為19**
2、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“等等。要注意的是:1、這兩種插入格式采用非嚴格語法的時候(即為時分秒不完整,只有時分等等),最右邊的數據將默認為秒數,例如插入2318時,最終入庫為002318。 2、分鐘與秒數的數據要有實際意義,假若·MM為65超過59,那麼將會發生錯誤。
3、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()
4、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,兩位數字插入年份問題與上述一致。
5、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數據類型。
(以上是自己的一些見解,若有不足或者錯誤的地方請各位指出)
作者:壹葉隨風
聲明:本博客文章為原創,只代表本人在工作學習中某一時間內總結的觀點或結論。轉載時請在文章頁面明顯位置給出原文鏈接。