時間日期數據類型總概況
MySQL中有多種表示時間日期的數據類型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等。每一種數據類型都有存儲的時間日期格式、以及取值范圍,因此在使用時間日期數據類型的時候需要選取最佳的數據類型。
此處注意發現:Time類型HH的取值竟然是800+,而不是我們本以為的24以內的數字,具體原因,下面會有解釋
各類型詳細講解
1、Year
見名之意,year用於存儲年,存儲時只需要一個字節,插入數據時可以使用各種格式指定YEAR值(非常節約內存,所以當你只需要年的時候,用此字段合適)。
支持的常見插入格式為:
(推薦甚至強制要求必須)
四位字符串或者數字,范圍為“1901”~“2155”,寫多少即為多少- 兩位字符串格式:范圍為“00”“99”,"00""69"被轉化為20**(例如:“16”轉化為“2016”),“70”~“99”被轉化為19**(下同)
- 兩位數字格式,范圍為199,169被轉化為20**(例如:1轉化為2001),70~99被轉化為19**
2、Time
time用於存儲時間信息,存儲時需要三個字節。
雖然,小時的范圍是0~~23,但是為了表示某種特殊需要的時間間隔,將Time類型的范圍擴大了。而且還支持了負值。
支持的常見插入格式為:
(推薦甚至強制要求必須)
字符串格式:‘HH:MM:SS’,‘HH:MM’,‘D HH:MM’,‘D HH’,'SS’等形式。舉個例子,輸入‘30’,Time類型會自動轉換為00:00:30。- HHMMSS’格式的字符串或HHMMSS格式的數值表示,例如,輸入‘123456’,Time類型會轉換成12:34:56;輸入123456,Time類型會轉換成12:34:56。如果輸入0或者‘0’,那么TIME類型會轉換為0000:00:00。
- ‘D HH:MM:SS’格式的字符串表示。其中,D表示天數,取值范圍是0~~34。保存時,小時的值等於(D*24+HH)。舉個例子,輸入‘2 11:30:50’,Time類型會轉換為59:30:50。
使用current_time或者current_time()或者now()輸入當前系統時間。(一般用於默認值)
3、Date
date用於存儲日期,沒有時間部分,存儲時需要三個字節。
支持的常見插入格式為:
- (推薦甚至強制要求必須) ‘YYYY-MM-DD’或‘YYYYMMDD’格式的字符串表示,這種方式可以表達的范圍是‘1000-01-01’~‘9999-12-31’。
- MySQL中還支持一些不嚴格的語法格式,任何標點都可以用來做間隔符。如’YYYY/MM/DD‘,’YYYY@MM@DD‘,’YYYY.MM.DD‘等分隔形式。舉個例子,輸入’2011.3.8‘,date類型將轉換為2011-03-08。
- ’YY-MM-DD‘或者’YYMMDD‘格式的字符串表示,其中’YY‘的取值,’00‘’69‘轉換為20002069,’70‘’99‘轉換為19701999。與year類型類似。
- 使用current_date或now()來輸入當前系統時間。
4、Datetime
datetime類型使用8個字節來表示日期和時間。
支持的常見插入格式為:
- (推薦甚至強制要求必須)‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’格式的字符串表示。這種方式可以表達的范圍是‘1000-01-01 00:00:00’~~‘9999-12-31 23:59:59’。
- MySQL中還支持一些不嚴格的語法格式,任何的標點都可以用來做間隔符。情況與date類型相同,而且時間部分也可以使用任意的分隔符隔開,這與Time類型不同,Time類型只能用‘:’隔開呢。
- 使用now()來輸入當前系統日期和時間。
5、timestamp
timestamp類型使用4個字節來表示日期和時間。
支持的常見插入格式為:
二者主要區別在於取值范圍。
- timestamp存儲需要四個字節,它的取值范圍為“1970-01-01 00:00:01” UTC ~ “2038-01-19 03:14:07” (和時區有關)
- 而datetime取值范圍為“1000-01-01 00:00:00” ~ “9999-12-31 23:59:59”(和時區無關,怎么存入怎么返回,對程序員友好)
2、timestamp類型還有一個很大的特殊點,就是時間是根據時區來顯示的。
例如,在東八區插入的timestamp類型為2009-09-30 14:21:25,在東七區顯示時,時間部門就變成了13:21:25,在東九區顯示時,時間部門就變成了15:21:25。
3、需要顯示日期與時間,timestamp類型需要根據不同地區的時區來轉換時間,但是,timestamp類型的范圍太小,其最大時間為2038-01-19 11:14:07。
如果插入時間的比這個大,將會數據庫插入0000-00-00 00:00:00。所以需要的時間范圍比較大,還是選擇dateTime類型比較安全。
MySQL中如何表示當前時間?
其實,表達方式還是蠻多的,匯總如下:
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP()
NOW()
LOCALTIME
LOCALTIME()
LOCALTIMESTAMP
LOCALTIMESTAMP()