top
Loading...
11.3.日期和時間類型
11.3. 日期和時間類型
11.3.1. DATETIME、DATE和TIMESTAMP類型
11.3.2. TIME類型
11.3.3. YEAR類型
11.3.4. Y2K事宜和日期類型

表示時間值的DATE和時間類型為DATETIMEDATETIMESTAMPTIMEYEAR。每個時間類型有一個有效值范圍和一個“”值,當指定不合法的MySQL不能表示的值時使用“”值。TIMESTAMP類型有專有的自動更新特性,將在后面描述。

如果試圖插入一個不合法的日期,MySQL將給出警告或錯誤。可以使用ALLOW_INVALID_DATES SQL模式讓MySQL接受某些日期,例如'1999-11-31'。當你想要保存一個“可能錯誤的”用戶已經在數據庫中指定(例如,以web形式)用于將來處理的值時很有用。在這種模式下,MySQL只驗證月范圍為從012,日范圍為從031。這些范圍可以包括零,因為MySQL允許在DATEDATETIME列保存日/月和日是零的日期。這在應用程序需要保存一個你不知道確切日期的生日時非常有用。在這種情況下,只需要將日期保存為'1999-00-00''1999-01-00'。如果保存此類日期,DATE_SUB()DATE_ADD等需要完整日期的函數不會得到正確的結果。(如果你不想在日期中出現零,可以使用NO_ZERO_IN_DATE SQL模式)

MySQL還允許將'0000-00-00'保存為“偽日期”(如果不使用NO_ZERO_DATE SQL模式)。這在某些情況下比使用NULL值更方便(并且數據和索引占用的空間更小)

sql_mode系統變量設置為相應模式值,可以更確切你想讓MySQL支持哪種日期。參見5.3.2節,“SQL服務器模式”。

當使用日期和時間類型時應記住以下幾點:

·         MySQL以標準輸出格式檢索給定日期或時間類型的值,但它盡力解釋你指定的各種輸入值格式(例如,當你指定一個分配給或與日期或時間類型進行比較的值時)。只支持下面章節中描述的格式。期望你能提供有效值。如果你使用其它格式的值會發生意想不到的結果。

·         包含兩位年值的日期會令人模糊,因為世紀不知道。MySQL使用以下規則解釋兩位年值:

o        70-99范圍的年值轉換為1970-1999

o        00-69范圍的年值轉換為2000-2069

·         盡管MySQL嘗試解釋幾種格式的值,日期總是以年--日順序(例如,'98-09-04'),而不是其它地方常用的月--年或日--年順序(例如,'09-04-98''04-09-98')

·         如果值用于數值上下文中,MySQL自動將日期或時間類型的值轉換為數字,反之亦然。

·         MySQL遇到一個日期或時間類型的超出范圍或對于該類型不合法的值時(如本節開始所描述),它將該值轉換為該類的“”值。一個例外是超出范圍的TIME值被裁剪到TIME范圍的相應端點。

下面的表顯示了各類“”值的格式。請注意如果啟用NO_ZERO_DATE SQL模式,使用這些值會產生警告。

列類型

”值

DATETIME

'0000-00-00 00:00:00'

DATE

'0000-00-00'

TIMESTAMP

00000000000000

TIME

'00:00:00'

YEAR

0000

·         ”值是特殊值,但你可以使用表內顯示的值顯式保存或引用它們。你也可以使用值'0'0來保存或引用,寫起來更容易。

·         MyODBC中使用的“”日期或時間值在MyODBC 2.50.12和以上版本中被自動轉換為NULL,因為ODBC不能處理此類值。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/column-types.html
北斗有巢氏 有巢氏北斗