Mysql中DATETIME、DATE和TIMESTAMP類型的特徵和區別

當你須要同時包含日期和時間信息的值時則使用DATETIME類型。MySQL'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值。支持的範圍爲'1000-01-01 00:00:00''9999-12-31 23:59:59'(支持」表示儘管先前的值可能工做,但沒有保證)服務器

當你只須要日期值而不須要時間部分時應使用DATE類型。MySQL'YYYY-MM-DD'格式檢索和顯示DATE值。支持的範圍是'1000-01-01''9999-12-31'函數

TIMESTAMP列類型的屬性不固定,取決於MySQL版本和服務器運行的SQL模式。這些屬性將在本節後面描述。 spa

可使用任何常見格式指定DATETIMEDATETIMESTAMP值: .net

'YYYY-MM-DD HH:MM:SS''YY-MM-DD HH:MM:SS'格式的字符串。容許「不嚴格」語法:任何標點符均可以用作日期部分或時間部分之間的間割符。例如,'98-12-31 11:30:45''98.12.31 11+30+45''98/12/31 11*30*45''98@12 @31 11^30^45'是等價的。 對象

'YYYY-MM-DD''YY-MM-DD'格式的字符串。這裏也容許使用「不嚴格的」語法。例如,'98-12-31''98.12.31''98/12/31''98@12 @31'是等價的。 字符串

'YYYYMMDDHHMMSS''YYMMDDHHMMSS'格式的沒有間割符的字符串,假定字符串對於日期類型是有意義的。例如,'19970523091528''970523091528'被解釋爲'1997-05-23 09:15:28',但'971122129015'是不合法的(它有一個沒有意義的分鐘部分),將變爲'0000-00-00 00:00:00'get

'YYYYMMDD''YYMMDD'格式的沒有間割符的字符串,假定字符串對於日期類型是有意義的。例如,'19970523''970523'被解釋爲 '1997-05-23',但'971332'是不合法的(它有一個沒有意義的月和日部分),將變爲'0000-00-00'class

YYYYMMDDHHMMSSYYMMDDHHMMSS格式的數字,假定數字對於日期類型是有意義的。例如,19830905132800830905132800被解釋爲 '1983-09-05 13:28:00'語法

YYYYMMDDYYMMDD格式的數字,假定數字對於日期類型是有意義的。例如,19830905830905被解釋爲'1983-09-05'程序

函數返回的結果,其值適合DATETIMEDATE或者TIMESTAMP上下文,例如NOW()CURRENT_DATE

無效DATETIMEDATE或者TIMESTAMP值被轉換爲相應類型的「」值('0000-00-00 00:00:00''0000-00-00'或者00000000000000)

對於包括日期部分間割符的字符串值,若是日和月的值小於10,不須要指定兩位數。'1979-6-9''1979-06-09'是相同的。一樣,對於包括時間部分間割符的字符串值,若是時、分和秒的值小於10,不須要指定兩位數。'1979-10-30 1:2:3''1979-10-30 01:02:03'相同。

數字值應爲6812或者14位長。若是一個數值是814位長,則假定爲YYYYMMDDYYYYMMDDHHMMSS格式,前4位數表示年。若是數字 是612位長,則假定爲YYMMDDYYMMDDHHMMSS格式,前2位數表示年。其它數字被解釋爲彷彿用零填充到了最近的長度。

指定爲非限定符字符串的值使用給定的長度進行解釋。若是字符串爲814字符長,前4位數表示年。不然,前2位數表示年。從左向右解釋字符串內出現的各部分,以發現年、月、日、小時、分和秒值。這說明不該使用少於6字符的字符串。例如,若是你指定'9903',認爲它表示19993月,MySQL將在你的表內插入一個「」日期值。這是由於年和月值是9903,但日部分徹底丟失,所以該值不是一個合法的日期。可是,能夠明顯指定一個零值來表明缺乏的月或日部分。例如,可使用'990300'來插入值'1999-03-00'

在必定程度上,能夠將一個日期類型的值分配給一個不一樣的日期類型。可是,值可能會更改或丟失一些信息:

若是你爲一個DATETIMETIMESTAMP對象分配一個DATE值,結果值的時間部分被設置爲'00:00:00',由於DATE值未包含時間信息。

若是你爲一個DATE對象分配一個DATETIMETIMESTAMP值,結果值的時間部分被刪除,由於DATE值未包含時間信息。

記住儘管可使用相同的格式指定DATETIMEDATETIMESTAMP值,不一樣類型的值的範圍卻不一樣。例如,TIMESTAMP值不能早於1970或晚於2037。這說明一個日期,例如'1968-01-01',雖然對於DATETIMEDATE值是有效的,但對於TIMESTAMP值卻無效,若是分配給這樣一個對象將被轉換爲0

當指定日期值時請注意某些缺陷:

指定爲字符串的值容許的非嚴格格式可能會欺騙。例如,值'10:11:12'因爲‘:’間割符看上去可能象時間值,但若是用於日期上下文值則被解釋爲年'2010-11-12'。值'10:45:15'被轉換爲'0000-00-00'由於'45'不是合法月。

在非嚴格模式,MySQL服務器只對日期的合法性進行基本檢查:年、月和日的範圍分別是1000999900120031。任何包含超出這些範圍的部分的日期被轉換成'0000-00-00'。請注意仍然容許你保存非法日期,例如'2002-04-31'。要想確保不使用嚴格模式時日期有效,應檢查應用程序。

在嚴格模式,非法日期不被接受,而且不轉換。

包含兩位年值的日期會使人模糊,由於世紀不知道。MySQL使用如下規則解釋兩位年值:

00-69範圍的年值轉換爲2000-2069

70-99範圍的年值轉換爲1970-1999

相關文章
相關標籤/搜索