標籤:複製 意義 pre 整數 ror 精確 state inline .com
1 日期類型
MySql中關於日期的類型有Date/Datetime/Timestamp三種類型。
日期賦值時,允許“不嚴格”文法:任何標點符都可以用做日期部分或時間部分之間的間割符。例如,‘98-12-31 11:30:45‘、‘98.12.31 11+30+45‘、‘98/12/31 11*30*45‘和‘[email protected]@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年。
MySQL中日期和時間類型