MySQL中日期和時間類型

1 日期類型

MySql中關於日期的類型有Date/Datetime/Timestamp三種類型。sql

日期賦值時,容許「不嚴格」語法:任何標點符均可以用作日期部分或時間部分之間的間割符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等價的,對於不合法的將會轉換爲:0000-00-00 00:00:00安全

 

1.1 Date格式

此類型的字段,存儲數據格式爲:YYYY-MM-DD,它支持的範圍爲'1000-01-01'到'9999-12-31',而且容許使用字符串或數字爲此列複製。服務器

例如,日期格式的字段crt_date,經過字符串和數字複製後的結果以下:函數

update sys_tables set crt_date = 12331212 where table_name = 'sys_dict';
update sys_tables set crt_date = '1233-12-12' where table_name = 'sys_dict_item';

image

1.2 Datetime格式

日期和時間的組合,存儲格式爲:YYYY-MM-DD HH:MM:SS,它支持的範圍爲'1000-01-01 00:00:00'到'9999-12-31 23:59:59',而且容許使用字符串或數字進行分配值。編碼

例如:spa

update sys_tables set crt_date = 12331212121212 where table_name = 'sys_dict';
update sys_tables set crt_date = '1233-12-12 12:12:12' where table_name = 'sys_dict_item';

image

 

1.3 TimeStamp格式

這是時間戳,從1970-01-01 00:00:00到當前的時間差值(注意:當你在Java中輸出[new Date(0)] 的時候,輸出的是:Thu Jan 01 08:00:00 CST 1970,這是由於時區的概念,中國是東八區,因此對應的是早上八點),它精確到毫秒級別,範圍爲:1970-01-01 00:00:00 到 2037年(參考2038年問題),當值大於2037年就會拋出: [Error Code: 1292, SQL State: 22001]  Data truncation: Incorrect datetime value: '20381212121212' for column 'crt_date' at row 1。設置值時只容許設置數字類型的值。code

在爲TimeStamp類型字段賦值的時候,值必須大於19700101000000,不然就會拋出: [Error Code: 1292, SQL State: 22001]  Data truncation: Incorrect datetime value: '10831212121212' for column 'crt_date' at row 1。blog

例如:事件

update sys_tables set crt_date = 20081212121212 where table_name = 'sys_dict';
image

2 時間類型

MySQL中時間類型用Time表示。字符串

2.1 Time格式

MySQL以'HH:MM:SS'格式檢索和顯示TIME值(或對於大的小時值採用'HHH:MM:SS'格式)。TIME值的範圍能夠從'-838:59:59'到'838:59:59'。小時部分會所以大的緣由是TIME類型不只能夠用於表示一天的時間(必須小於24小時),還可能爲某個事件過去的時間或兩個事件之間的時間間隔(能夠大於24小時,或者甚至爲負)。

格式說明:

  • 'D HH:MM:SS.fraction'格式的字符串。還可使用下面任何一種「非嚴格」語法:'HH:MM:SS.fraction'、'HH:MM:SS'、'HH:MM'、'D HH:MM:SS'、'D HH:MM'、'D HH'或'SS'。這裏D表示日,能夠取0到34之間的值。請注意MySQL還不保存分數。
  • 'HHMMSS'格式的沒有間割符的字符串,假定是有意義的時間。例如,'101112'被理解爲'10:11:12',但'109712'是不合法的(它有一個沒有意義的分鐘部分),將變爲'00:00:00'。
  • HHMMSS格式的數值,假定是有意義的時間。例如,101112被理解爲'10:11:12'。下面格式也能夠理解:SS、MMSS、HHMMSS、HHMMSS.fraction。請注意MySQL還不保存分數。
  • 函數返回的結果,其值適合TIME上下文,例如CURRENT_TIME。
  • 超出TIME範圍但合法的值被裁爲範圍最接近的端點。例如,'-850:00:00'和'850:00:00'被轉換爲'-838:59:59'和'838:59:59'。

3 年類型

MySQL中用year表示年類型

MySQL以YYYY格式檢索和顯示YEAR值。範圍是1901到2155。

能夠指定各類格式的YEAR值:

  • 四位字符串,範圍爲'1901'到'2155'。
  • 四位數字,範圍爲1901到2155。
  • 兩位字符串,範圍爲'00'到'99'。'00'到'69'和'70'到'99'範圍的值被轉換爲2000到2069和1970到1999範圍的YEAR值。
  • 兩位整數,範圍爲1到99。1到69和70到99範圍的值被轉換爲2001到2069和1970到1999範圍的YEAR值。請注意兩位整數範圍與兩位字符串範圍稍有不一樣,由於你不能直接將零指定爲數字並將它解釋爲2000。你必須將它指定爲一個字符串'0'或'00'或它被解釋爲0000。
  • 函數返回的結果,其值適合YEAR上下文,例如NOW()。
  • 非法YEAR值被轉換爲0000。

4 日期兼容性問題

  1. MySQL服務器採用了Unix的時間功能,對於TIMESTAMP值,可處理的日期至2037年。對於DATE和DATETIME值,可接受的日期可至9999年。
  2. 全部的MySQL日期函數均是在1個源文件sql/time.cc中實現的,並通過了恰當編碼以確保2000年安全。
  3. 在MySQL 3.22和之後的版本中,YEAR列類型可以在1個字節內保存0年以及1901~2155年,並能使用兩位或四位數字顯示它們。全部的兩位數字年份均被視爲介於1970~2069年之間,這意味着,若是你在YEAR列中保存了01,MySQL服務器會將其看成2001年。
相關文章
相關標籤/搜索