Mysql--時(shí)間類(lèi)型

mysql(5.5)所支持的日期時(shí)間類(lèi)型有:DATETIME、 TIMESTAMP刹孔、DATE桌吃、TIME、YEAR榄攀。
五種類(lèi)型表示如下:

日期時(shí)間類(lèi)型 | 占用空間 | 日期時(shí)間格式|最小值|最大值|零值表示
----|------|----|---|---|
YEAR | 1bytes | YYYY|1901 |2155 |0000
TIME | 3bytes| HH:MM:SS| -838:59:59|838:59:59|00:00:00
DATE |4bytes|YYYY-MM-DD|1000-01-01|9999-12-31|0000-00-00
DATETIME|8bytes|YYYY-MM-DD HH:MM:SS| 1000-01-01 00:00:00|9999-12-31 23:59:59|0000-00-00 00:00:00
TIMESTAMP|4bytes|YYYY-MM-DDHH:MM:SS|19700101080001|2038 年的某個(gè)時(shí)刻|00000000000000

當(dāng)插入值超出有效取值范圍時(shí)嗜傅,系統(tǒng)會(huì)報(bào)錯(cuò),并將零值插入到數(shù)據(jù)庫(kù)中檩赢。

YEAR類(lèi)型

YEAR 用于表示年份,YEAR有2位和4位兩種格式吕嘀。 默認(rèn)是4位。如果實(shí)際應(yīng)用只有保存年份的需求贞瞒,那么用 1 bytes 保存 YEAR 類(lèi)型完全可以.不但能夠節(jié)約存儲(chǔ)空間偶房,還能提高表的操作效率。

 CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_time_1` year DEFAULT NULL,
  `create_time_2` year(2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

當(dāng)希望使用兩位格式的YEAR時(shí),要顯示聲明為year(2);當(dāng)希望使用四位格式的YEAR時(shí),可以直接聲明為year,系統(tǒng)默認(rèn)是四位,也可以顯示聲明為year(4).year(2)和year(4)賦值方法如下

  • year(4)賦值
    當(dāng)類(lèi)型為year(4)時(shí),直接插入4位字符串或者4位數(shù)字即可,有效值范圍是1901-2155,超過(guò)這個(gè)范圍賦值,系統(tǒng)會(huì)給出一個(gè)警告,并插入零值0000
  • year(2)賦值
    1.插入2位字符串或者兩位數(shù)字军浆,這種情況下如果插入‘00’‘69’或者00-69棕洋,則相當(dāng)于插入20002069;如果插入‘70’‘99’或者70-99瘾敢,則相當(dāng)于插入19701999拍冠。也可以看出當(dāng)聲明為year(2)時(shí),其實(shí)year類(lèi)型的有效范圍已經(jīng)被縮小了,且含義表達(dá)不如year(4)清楚明了.
 insert into test(create_time_1)values(2017);
 insert into test(create_time_1)values('2017');
 insert into test(create_time_2)values('00');
 insert into test(create_time_2)values('69');
 insert into test(create_time_2)values(70);
 insert into test(create_time_1)values(2255);#超出有效范圍

從上圖可以看出,當(dāng)插入值超過(guò)1901-2155范圍賦值,系統(tǒng)會(huì)給出一個(gè)警告,并插入零值0000.

TIME

TIME類(lèi)型表示為“時(shí):分:秒”尿这,即 ‘HH:MM:SS’.其有效值范圍是-838:59:59 838:59:59.一般而言小時(shí)范圍是023簇抵,但是為了表示某些特殊時(shí)間間隔,MySQL將TIME的小時(shí)范圍擴(kuò)大了射众,而且支持負(fù)值.TIME類(lèi)型只占3個(gè)字節(jié)碟摆,如果只是存儲(chǔ)時(shí)間數(shù)據(jù),它最合適了叨橱。
對(duì)TIME類(lèi)型賦值典蜕,其格式有一下幾種

  1. ‘HH:MM:SS’標(biāo)準(zhǔn)格式
  2. 'HHMMSS'格式,系統(tǒng)能夠自動(dòng)轉(zhuǎn)化為標(biāo)準(zhǔn)格式罗洗。
  3. D HH:MM:SS’格式愉舔,此格式相當(dāng)于插入‘(D*24+HH):MM:SS’。比如插入‘2 23:50:50’伙菜,相當(dāng)于插入了‘71:50:50’轩缤。
  4. ‘HH:MM’或‘SS’格式,其效果是其他未被表示位的值賦為零值。比如插入‘30’火的,相當(dāng)于插入了‘00:00:30’壶愤;如果插入‘11:25’,相當(dāng)于插入了‘11:25:00’馏鹤。
  5. ‘D HH’和‘D HH:MM’格式,效果按上面的例子可以推理出來(lái)了吧征椒。
    如果我們想插入系統(tǒng)的當(dāng)前時(shí)間,則可以插入CURRENT_TIME或者NOW()湃累。
CREATE TABLE `test_time` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_time` time DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into test_time(create_time)values(current_time);
insert into test_time(create_time)values(now());
insert into test_time(create_time)values('11:11:11');
insert into test_time(create_time)values('121212');
insert into test_time(create_time)values('2 23:50:50');
insert into test_time(create_time)values('13:13');
insert into test_time(create_time)values('14');
#超出有效范圍
insert into test_time(create_time)values('840:60:60');

DATE

DATE類(lèi)型表示為"年-月-日",即"YYYY-MM-DD".其有效值范圍是1000-01-01-9999-12-31.除了標(biāo)準(zhǔn)語(yǔ)法格式"YYYY-MM-DD"勃救,MySQL還支持一些不嚴(yán)格的語(yǔ)法格式,分隔符“-”可以用“@”治力、“.”等其他符號(hào)替代剪芥。
在插入數(shù)據(jù)時(shí),也可以使用“YY-MM-DD”格式琴许,YY轉(zhuǎn)化成對(duì)應(yīng)的年份的規(guī)則與YEAR類(lèi)型類(lèi)似税肪。
如果我們想插入系統(tǒng)的當(dāng)前時(shí)間,則可以插入CURRENT_DATE或者NOW()榜田。

 CREATE TABLE `test_date` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_date` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into test_date(create_date)values(current_date);
insert into test_date(create_date)values(now());
insert into test_date(create_date)values('2017-01-01');
insert into test_date(create_date)values('2017@02@01');
insert into test_date(create_date)values('10000-12-31');

DATETIME

DATETIME就是 DATE 和 TIME 的組合標(biāo)準(zhǔn)格式為“YYYY-MM-DD HH:MM:SS”益兄,具體賦值方法與上面各種類(lèi)型的方法相似。

CREATE TABLE `test_datetime` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_datetime` datetime DEFAULT CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,##我看公司的是這樣寫(xiě)的,為什么錯(cuò)了呢.
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

TIMESTAMP類(lèi)型

TIMESTAMP 用于表示年-月-日 時(shí):分:秒箭券,但是記錄的年份比較短暫净捅。TIMESTAMP 和時(shí)區(qū)相關(guān),更能反映當(dāng)前時(shí)間辩块。當(dāng)插入日期時(shí)蛔六,會(huì)先轉(zhuǎn)換為本地時(shí)區(qū)后再存放;當(dāng)查詢?nèi)掌跁r(shí)废亭,會(huì)將日期轉(zhuǎn)換為本地時(shí)區(qū)后再顯示国章。所以不同時(shí)區(qū)的人看到的同一時(shí)間是不一樣的。它的插入也與插入其他日期和時(shí)間數(shù)據(jù)類(lèi)型類(lèi)似豆村。如果記錄的日期需要讓不同時(shí)區(qū)的人使用液兽,最好使用 TIMESTAMP。

那么TIMESTAMP類(lèi)型如何插入當(dāng)前時(shí)間掌动?

  1. 可以使用CURRENT_TIMESTAMP四啰;
  2. 輸入NULL,系統(tǒng)自動(dòng)輸入當(dāng)前的TIMESTAMP
  3. 無(wú)任何輸入粗恢,系統(tǒng)自動(dòng)輸入當(dāng)前的TIMESTAMP柑晒。

TIMESTAMP是一個(gè)非常特殊的時(shí)間類(lèi)型.

  • 如果表中只有一個(gè)TIMESTAMP類(lèi)型的字段.系統(tǒng)會(huì)默認(rèn)設(shè)置DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.
  • 如果表中有兩個(gè)TIMESTAMP類(lèi)型的字段,系統(tǒng)會(huì)如何應(yīng)對(duì)呢.
    用以下定義來(lái)創(chuàng)建一個(gè)表.
CREATE TABLE `test_timestamp` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_timestamp` timestamp,
`create_timestamp2` timestamp ,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

用show來(lái)看看系統(tǒng)自動(dòng)補(bǔ)全了什么

CREATE TABLE `test_timestamp` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `create_timestamp2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

從系統(tǒng)補(bǔ)全結(jié)果可以看出 表中的第一個(gè) TIMESTAMP 列系統(tǒng)會(huì)默認(rèn)設(shè)置DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,這與表中只有一個(gè) TIMESTAMP 列設(shè)置是相同的。第二個(gè) TIMESTAMP 列眷射,系統(tǒng)會(huì)默認(rèn)設(shè)置DEFAULT '0000-00-00 00:00:00',且沒(méi)有on update設(shè)置.這就告訴我們,在我們自己定義表示表時(shí),不可以這樣

CREATE TABLE `test_timestamp` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `create_timestamp` timestamp  DEFAULT CURRENT_TIMESTAMP,
`create_timestamp2` timestamp  DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

從報(bào)錯(cuò)結(jié)果中可以看出,一個(gè)表中可以有兩個(gè)TIMESTAMP類(lèi)型的列,但是這兩個(gè)列不可以同時(shí)設(shè)置DEFAULT CURRENT_TIMESTAMP 或ON UPDATE CURRENT_TIMESTAMP 屬性.

  • 時(shí)間類(lèi)型為 Timestamp的列,即使此列規(guī)定NOT NULL,如果往這屬性的列中插入Null值的話匙赞,仍可以插入NULL成功,且系統(tǒng)會(huì)插入一個(gè)當(dāng)前時(shí)間.當(dāng)有兩個(gè) Timestamp的列時(shí),如果往這兩個(gè)列中均插入Null值的話,則兩個(gè)都會(huì)插入系統(tǒng)當(dāng)前時(shí)間.
    注意:并不是所有的時(shí)間類(lèi)型都是特例,datetime,date,time,year類(lèi)型如果規(guī)定NOT NULL,則不可以插入NULL值.
  • 無(wú)任何輸入.第一個(gè)系統(tǒng)會(huì)插入一個(gè)當(dāng)前時(shí)間,第二列系統(tǒng)會(huì)插入一個(gè)零值.
 insert into test_timestamp(id) values(null);#無(wú)任何輸入
 insert into test_timestamp values(null,null,null);#插入NULL
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恋追,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子罚屋,更是在濱河造成了極大的恐慌苦囱,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脾猛,死亡現(xiàn)場(chǎng)離奇詭異撕彤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)猛拴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)羹铅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人愉昆,你說(shuō)我怎么就攤上這事职员。” “怎么了跛溉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵焊切,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我芳室,道長(zhǎng)专肪,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任堪侯,我火速辦了婚禮嚎尤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伍宦。我一直安慰自己芽死,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布次洼。 她就那樣靜靜地躺著关贵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滓玖。 梳的紋絲不亂的頭發(fā)上坪哄,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音势篡,去河邊找鬼。 笑死模暗,一個(gè)胖子當(dāng)著我的面吹牛禁悠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兑宇,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼碍侦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起瓷产,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤站玄,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后濒旦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體株旷,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年尔邓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晾剖。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梯嗽,死狀恐怖齿尽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灯节,我是刑警寧澤循头,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站炎疆,受9級(jí)特大地震影響贷岸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜磷雇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一偿警、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唯笙,春花似錦螟蒸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至苞慢,卻和暖如春诵原,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挽放。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工绍赛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辑畦。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓吗蚌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親纯出。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚯妇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1敷燎、MySQL中時(shí)間類(lèi)型分類(lèi) 下表列出了四種時(shí)間類(lèi)型以及相關(guān)對(duì)比: 日期類(lèi)型| 存儲(chǔ)空間 |日期格式 |日期范圍|...
    maxwellyue閱讀 10,617評(píng)論 0 6
  • 什么是數(shù)據(jù)庫(kù)? 數(shù)據(jù)庫(kù)是存儲(chǔ)數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序箩言。每個(gè)數(shù)據(jù)庫(kù)具有一個(gè)或多個(gè)不同的API硬贯,用于創(chuàng)建,訪問(wèn)陨收,管理...
    chen_000閱讀 4,035評(píng)論 0 19
  • mysql中時(shí)間數(shù)據(jù)類(lèi)型 mysql提供了DATETIME饭豹、DATE、TIMESTAMP畏吓、TIME和YEAR五種數(shù)...
    紫石南閱讀 375評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理符匾,服務(wù)發(fā)現(xiàn)昆婿,斷路器沛慢,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 價(jià)格和價(jià)值一定會(huì)有規(guī)律可循的
    茅臺(tái)小新閱讀 501評(píng)論 0 0