1 日期類型
MySql中關於日期的類型有Date/Datetime/Timestamp三種類型。
日期賦值時,允許“不嚴格”語法:任何標點符都可以用做日期部分或時間部分之間的間割符。例如,'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';
1.2 Datetime格式
日期和時間的組合,存儲格式為:YYYY-MM-DD HH:MM:SS,它支持的范圍為'1000-01-01 00:00:00'到'9999-12-31 23:59:59',並且允許使用字符串或數字進行分配值。
例如:
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';
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。設置值時只允許設置數字類型的值。
在為TimeStamp類型字段賦值的時候,值必須大於19700101000000,否則就會拋出: [Error Code: 1292, SQL State: 22001] Data truncation: Incorrect datetime value: '10831212121212' for column 'crt_date' at row 1。
例如:
update sys_tables set crt_date = 20081212121212 where table_name = 'sys_dict';

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 日期兼容性問題
- MySQL服務器采用了Unix的時間功能,對於TIMESTAMP值,可處理的日期至2037年。對於DATE和DATETIME值,可接受的日期可至9999年。
- 所有的MySQL日期函數均是在1個源文件sql/time.cc中實現的,並經過了恰當編碼以確保2000年安全。
- 在MySQL 3.22和以后的版本中,YEAR列類型能夠在1個字節內保存0年以及1901~2155年,並能使用兩位或四位數字顯示它們。所有的兩位數字年份均被視為介於1970~2069年之間,這意味着,如果你在YEAR列中保存了01,MySQL服務器會將其當作2001年。