1. 程式人生 > >MySQL日期類型

MySQL日期類型

bfc oss 服務 小時 mys val 自動 有意 ear

主要類型:YEAR、TIME、DATE、DATETIME、TIMESTAMP
(日期函數:current_date(當前日期)、current_time(當前時間)、
now()(當前日期和時間,根據字段類型顯示日期或者時間))
技術分享圖片
實驗timetest表結構
技術分享圖片

DATETIME
DATETIME 用於表示年月日時分秒,是 DATE 和 TIME 的組合,並且記錄的年份(見上表)比較長久。DATETIME類型,包含日期和時間部分。可以使用引號字符串或數字兩種,年份可以是4 位,也可以是2位如果實際應用中有這樣的需求,就可以使用 DATETIME 類型。
技術分享圖片
TIMESTAMP
TIMESTAMP 用於表示 年月日 時分秒,但是記錄的年份(見上表)比較短暫。

TIMESTAMP 和時區相關,更能反映當前時間。當插入日期時,會先轉換為本地時區後再存放;當查詢日期時,會將日期轉換為本地時區後再顯示。所以不同時區的人看到的同一時間是 不一樣的。
表中的第一個 TIMESTAMP 列自動設置為系統時間(CURRENT_TIMESTAMP)。當插入或更新一行,但沒有明確給 TIMESTAMP 列賦值,也會自動設置為當前系統時間。如果表中有第二個 TIMESTAMP 列,則默認值設置為0000-00-00 00:00:00。
TIMESTAMP 的屬性受 Mysql 版本和服務器 SQLMode 的影響較大。
如果記錄的日期需要讓不同時區的人使用,最好使用 TIMESTAMP。
TIMESTAMP類型和DATETIME類型的表示格式相同,存儲4個字節(比DATETIME少),取值範圍少於DATETIME類型。
TIMESTAMP和DATETIME最大不同於:TIMESTAMP根據時區顯示時間。
技術分享圖片
上圖timstamp字段會隨著時區的變化而變換,但是datetime則不會變化。
DATE
DATE 用於表示 年月日,如果實際應用值需要保存 年月日 就可以使用 DATE。
DATE類型可以通過如下格式表示:
‘YYYY-MM-DD‘,‘YYYYMMDD‘,YYYYMMDD,‘YY-MM-DD‘,‘YYMMDD‘,YYMMDD
其中當使用兩位表示年份時,分00~69和70~99兩種,參考YEAR類型。
技術分享圖片
技術分享圖片
TIME
TIME 用於表示 時分秒,如果實際應用值需要保存 時分秒 就可以使用 TIME。
TIME類型可以用多種格式表示,如:
‘D HH:MM:SS‘:D表示天數,在插入表中時會折算成小時,即:D*24+HH:MM:SS。
‘HHMMSS‘:省略冒號,但各個時間要有意義,比如‘128012’分鐘部分會被識別為‘12:80:12’,80分鐘是沒有意義的,插入會報錯。
‘HH:MM‘:表示小時分鐘,如‘12:08’表示12小時8分鐘。
‘SS‘:表示秒。
需要註意的是:如果輸入‘1208’,雖然我們想讓MySQL識別為12小時8分鐘,但在這種格式下,MySQL識別為‘00:12:08’
技術分享圖片技術分享圖片
技術分享圖片

YEAR
YEAR 用於表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默認是4位。如果實際應用只保存年份,那麽用 1 bytes 保存 YEAR 類型完全可以。不但能夠節約存儲空間,還能提高表的操作效率。
1.以4位數字或字符串表示,兩者效果相同,表示範圍1901~2155,插入超出範圍的數據會報錯。
2.以2位字符串格式表示,範圍為‘00’~‘99’。‘00’~‘69’表示2000~2069,‘70’~‘99’表示1970~1999。‘0’和‘00’都會被識別為2000,超出範圍的數據也會被識別為2000。
3.以2位數字格式表示,範圍為1~99。1~69表示2001~2069,70~99表示1970~1999。但0值會被識別為0000,這和2位字符串被識別為2000有所不同。
insert into timetest(t_year) values(2018),(‘2018‘),(‘00‘),(00),(10),(‘10‘),(77),(‘77‘),(‘0‘),(0);
技術分享圖片

MySQL日期類型