MySQL数据类型--日期时间
作者:壹葉隨風(fēng)
一、博客前言
自接觸學(xué)習(xí)MySQL已有一段時(shí)間了,對(duì)于MySQL的基礎(chǔ)知識(shí)還是有一定的了解的。在這一路學(xué)習(xí)過(guò)來(lái),每次不管看書(shū)還是網(wǎng)上看的資料,對(duì)于MySQL數(shù)據(jù)類(lèi)型中的時(shí)間日期類(lèi)型總是一掃而過(guò),不曾停下來(lái)認(rèn)認(rèn)真真的研究學(xué)習(xí)。最近在圖書(shū)館借了一本關(guān)于MysQL的書(shū)籍,打算全面的學(xué)習(xí)研究一遍。
在之前,我對(duì)于時(shí)間日期數(shù)據(jù)類(lèi)型不怎么感冒,也沒(méi)怎么用過(guò)這一類(lèi)型。在我的做項(xiàng)目里用到存貯時(shí)間的數(shù)據(jù),我都是采用int整型數(shù)據(jù)類(lèi)型來(lái)存儲(chǔ),即是存儲(chǔ)時(shí)間戳。但是在后面學(xué)習(xí)MySQL優(yōu)化的時(shí)候,就有一個(gè)原則就是存儲(chǔ)數(shù)據(jù)時(shí)應(yīng)采用最小占用空間的數(shù)據(jù)類(lèi)型。int類(lèi)型是4個(gè)字節(jié),TIMESTAMP也是4個(gè)字節(jié),但是在需要使用日期時(shí),時(shí)間戳還需要進(jìn)一步轉(zhuǎn)換,而TIMESTAMP類(lèi)型數(shù)據(jù)就不需要了。
所以說(shuō)認(rèn)真學(xué)習(xí)了解每一個(gè)知識(shí)點(diǎn)是必要的!
二、時(shí)間日期數(shù)據(jù)類(lèi)型總概況
? MySQL中有多種表示時(shí)間日期的數(shù)據(jù)類(lèi)型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等。每一種數(shù)據(jù)類(lèi)型都有存儲(chǔ)的時(shí)間日期格式、以及取值范圍,因此在使用時(shí)間日期數(shù)據(jù)類(lèi)型的時(shí)候需要選取最佳的數(shù)據(jù)類(lèi)型。
下圖列出了幾種數(shù)據(jù)類(lèi)型:
三、細(xì)講
1、YEAR
year用于存儲(chǔ)年,存儲(chǔ)時(shí)只需要一個(gè)字節(jié),插入數(shù)據(jù)時(shí)可以使用各種格式指定YEAR值。
常見(jiàn)的插入格式解析:
a、四位字符串或者數(shù)字格式,范圍為“1901”~“2155”,多少即為多少。
b、兩位字符串格式,范圍為“00”~“99”,"00"~"69"被轉(zhuǎn)化為20**(例如:“16”轉(zhuǎn)化為“2016”),“70”~“99”被轉(zhuǎn)化為19**
c、兩位數(shù)字格式,范圍為1~99,1~69被轉(zhuǎn)化為20**(例如:1轉(zhuǎn)化為2001),70~99被轉(zhuǎn)化為19**
2、TIME
time用于存儲(chǔ)時(shí)間信息,存儲(chǔ)時(shí)需要三個(gè)字節(jié)。從上圖中可以了解到time的存儲(chǔ)格式,還有數(shù)據(jù)范圍。其中HH小時(shí)大于一天的24小時(shí),可以為八百多的數(shù)字。這是因?yàn)檫@個(gè)類(lèi)型不僅僅可以用于存儲(chǔ)一天的某個(gè)時(shí)間還可以記錄一段時(shí)間的間隔。所以小時(shí)就24小時(shí)。插入數(shù)據(jù)可以有多種格式。
常見(jiàn)插入格式解析:
a、"D HH:MM:SS"格式字符串格式。還可以使用非嚴(yán)格語(yǔ)法插入,例如“HH:MM:SS”、"D HH:SS"、“MM:SS”、"D HH"、”SS“(D表示天,取值范圍為0~34)。在存入數(shù)據(jù)庫(kù)是D將會(huì)被轉(zhuǎn)換為D*24+HH,最終將當(dāng)做小時(shí)進(jìn)行入庫(kù)存儲(chǔ)。
b、”HHMMSS“沒(méi)間隔的字符串格式或者HHMMSS沒(méi)間隔的數(shù)字格式,非嚴(yán)格語(yǔ)法插入可以為,MMSS、SS、”MMSS“等等。要注意的是:1、這兩種插入格式采用非嚴(yán)格語(yǔ)法的時(shí)候(即為時(shí)分秒不完整,只有時(shí)分等等),最右邊的數(shù)據(jù)將默認(rèn)為秒數(shù),例如插入2318時(shí),最終入庫(kù)為002318。?2、分鐘與秒數(shù)的數(shù)據(jù)要有實(shí)際意義,假若·MM為65超過(guò)59,那么將會(huì)發(fā)生錯(cuò)誤。
3、DATE
date用于存儲(chǔ)日期,沒(méi)有時(shí)間部分,存儲(chǔ)時(shí)需要三個(gè)字節(jié)。插入數(shù)據(jù)可以有多種格式。
常見(jiàn)插入格式解析:
a、”YYYY-MM-DD“、"YYYYMMDD"。
b、”YY-MM-DD“、”YYMMDD“,以?xún)晌粩?shù)字來(lái)插入年份,這里主要區(qū)別”00~69”與“70~99”,前者表示20**,后者表示19**。
c、數(shù)字格式Y(jié)Y-MM-DD、YYMMDD,兩位數(shù)字插入年份,區(qū)別于上面一樣。
d、使用函數(shù)插入,CURRENT_DATE()、NOW()
4、DATETIME
datetime用于存儲(chǔ)日期時(shí)間數(shù)據(jù),存儲(chǔ)時(shí)需要八個(gè)字節(jié)。插入數(shù)據(jù)可以有多種格式。
常見(jiàn)插入格式解析:
a、”YYYY-MM-DD HH:MM:SS“、"YYYYMMDDHHMMSS",最終插入數(shù)據(jù)庫(kù)都為2017-01-17 23:55:59格式。
b、”YY-MM-DD HH:MM:SS“、"YYMMDDHHMMSS",兩位數(shù)字插入年份,主要區(qū)分“00~69”與“70~99”,區(qū)別于上面一樣。
c、數(shù)字格式插入,YYYYMMDDHHMMSS、YYMMDDHHMMSS,兩位數(shù)字插入年份問(wèn)題與上述一致。
5、TIMESTAMP
timestamp用于存儲(chǔ)日期時(shí)間數(shù)據(jù),與datetime存儲(chǔ)數(shù)據(jù)格式一樣,二者主要區(qū)別在于取值范圍。timestamp存儲(chǔ)需要四個(gè)字節(jié),它的取值范圍為“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 世界時(shí)間標(biāo)準(zhǔn)) 。插入格式也有多種。
常見(jiàn)插入格式解析:
與DATETIME一致,可以參考上面。
四、小結(jié)
了解MySQL的日期時(shí)間數(shù)據(jù)類(lèi)型對(duì)于選取一種適合存儲(chǔ)類(lèi)型是很有必要的。假若只有存儲(chǔ)年份可以選取YEAR、僅存儲(chǔ)時(shí)間可以選擇TIME、又或者需要存儲(chǔ)完整日期時(shí)間,那么可以根據(jù)實(shí)際情況選取DATATIME或者TIMESTAMP數(shù)據(jù)類(lèi)型。
?
轉(zhuǎn)載于:https://www.cnblogs.com/shenzikun1314/p/6365013.html
總結(jié)
以上是生活随笔為你收集整理的MySQL数据类型--日期时间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HDU1824 2-sat
- 下一篇: 微信公众号自动回复 node