日期和時間類型
表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每個時間類型有一個有效值范圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。
TIMESTAMP類型有專有的自動更新特性,將在后面描述。
類型 | 大小 | 范圍 | 格式 | 用途 | |
---|---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 | |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 時間值或持續(xù)時間 | |
YEAR | 1 | 1901/2155 | YYYY | 年份值 | |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 | |
TIMESTAMP | 4 |
1970-01-01 00:00:00/2038 結束時間是第2147483647秒,北京時間2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07 |
YYYYMMDD HHMMS |
日期時間類型
MySQL數(shù)據(jù)類型 | 含義 |
date | 日期 '2008-12-2' |
time | 時間 '12:25:36' |
datetime | 日期時間 '2008-12-2 22:06:44' |
timestamp | 自動存儲記錄修改時間 |
注意:若定義一個字段為timestamp,這個字段里的時間數(shù)據(jù)會隨其他字段修改的時候自動刷新,所以這個數(shù)據(jù)類型的字段可以存放這條記錄最后被修改的時間。
創(chuàng)建一個t8表,測試: mysql>createtablet8(n1year,n2date,n3time,n4datetime); QueryOK,0rowsaffected(0.04sec) #n1(year)插入"1901"值. mysql>insertintot8(n1)values(1901); QueryOK,1rowaffected(0.00sec) #查看表中的數(shù)據(jù). mysql>select*fromt8; +------+------+------+------+ |n1|n2|n3|n4| +------+------+------+------+ |1901|NULL|NULL|NULL| +------+------+------+------+ 1rowinset(0.00sec) #n2(date)插入"2017-12-04"值. mysql>insertintot8(n2)values("2017-12-04"); QueryOK,1rowaffected(0.04sec) #查看表中的數(shù)據(jù). mysql>select*fromt8; +------+------------+------+------+ |n1|n2|n3|n4| +------+------------+------+------+ |1901|NULL|NULL|NULL| |NULL|2017-12-04|NULL|NULL| +------+------------+------+------+ 2rowsinset(0.00sec) #n3(time)插入"18:12:03"值. mysql>insertintot8(n3)values("18:12:03"); QueryOK,1rowaffected(0.01sec) mysql>select*fromt8; +------+------------+----------+------+ |n1|n2|n3|n4| +------+------------+----------+------+ |1901|NULL|NULL|NULL| |NULL|2017-12-04|NULL|NULL| |NULL|NULL|18:12:03|NULL| +------+------------+----------+------+ 3rowsinset(0.00sec) #n4(datetime)插入"2018-12-0318:12:03"值. mysql>insertintot8(n4)values("2018-12-0318:12:03"); QueryOK,1rowaffected(0.00sec) mysql>select*fromt8; +------+------------+----------+---------------------+ |n1|n2|n3|n4| +------+------------+----------+---------------------+ |1901|NULL|NULL|NULL| |NULL|2017-12-04|NULL|NULL| |NULL|NULL|18:12:03|NULL| |NULL|NULL|NULL|2018-12-0318:12:03| +------+------------+----------+---------------------+ 4rowsinset(0.00sec) #timestamp屬性,自動更新時間戳. mysql>createtablet9( ->idint, ->tstimestamp ->); QueryOK,0rowsaffected(0.00sec) mysql>insertintot9(id)values(1); QueryOK,1rowaffected(0.00sec) mysql>select*fromt9; +------+---------------------+ |id|ts| +------+---------------------+ |1|2019-01-2619:04:40| +------+---------------------+ 1rowinset(0.00sec)
TIMESTAMP和DATETIME的不同點:
兩者的存儲方式不一樣
對于TIMESTAMP,它把客戶端插入的時間從當前時區(qū)轉化為UTC(世界標準時間)進行存儲。查詢時,將其又轉化為客戶端當前時區(qū)進行返回。
而對于DATETIME,不做任何改變,基本上是原樣輸入和輸出。
兩者所能存儲的時間范圍不一樣
timestamp所能存儲的時間范圍為:'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'。
datetime所能存儲的時間范圍為:'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。