一、前言
自接觸學習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資料型別。
**建設
MySQL資料型別 日期時間
日談健康 2017 01 18 00 31 一 部落格前言 自接觸學習mysql已有一段時間了,對於mysql的基礎知識還是有一定的了解的。在這一路學習過來,每次不管看書還是網上看的資料,對於mysql資料型別中的時間日期型別總是一掃而過,不曾停下來認認真真的研究學習。最近在圖書館借了一本關於mys...
MySQL資料型別 日期時間
mysql中有多種表示時間日期的資料型別,主要有year time date datetime timestamp等。每一種資料型別都有儲存的時間日期格式 以及取值範圍,因此在使用時間日期資料型別的時候需要選取最佳的資料型別。下圖列出了幾種資料型別 year用於儲存年,儲存時只需要乙個位元組,插入資...
MySQL 資料型別之日期和時間型別
表示時間值的日期和時間型別為datetime date timestamp time和year。每個時間型別有乙個有效值範圍和乙個 零 值,當指定不合法的mysql不能表示的值時使用 零 值。1,date 範圍 1000 01 01 9999 12 31 格式 yyyy mm dd 2,time 範...