MySQL的日期格式


 

MySQL的五種時間和日期類型

YEAR表示年份:字節數為1,取值范圍為“1901——2155”
DATE表示日期:字節數為4,取值范圍為“1000-01-01——9999-12-31”
TIME表示時間:字節數為3,取值范圍為“-838:59:59——838:59:59”
DATETIME和TIMESTAMP表示日期和時間
DATETIME:字節數為8,取值范圍為“1000-01-01 00:00:00——9999-12-31 23:59:59”
TIMESTAMP,字節數為4,取值范圍為“19700101080001——20380119111407”

 

給各種時間日期類型賦值

1.
給YEAR賦值有3種方式
方式一:
直接插入4位字符串("1998")或者4位數字(1998)
方式二:
插入兩位字符串("04")
如果范圍是"00"-"69",則相當於插入"2000"-"2069"
如果范圍是"70"-"99",則相當於插入"1970"-"1999"
**注:"0"和"00"的效果一樣都表示2000年**
方式三:
插入兩位數字(90)
插入數字和插入字符的區別在於,插入一位0表示的不是2000年,而是0000.

2.
給TIME賦值
TIME類型表示為“時:分:秒”,盡管小時范圍一般是0~23,但是為了表示某些特殊時間間隔,MySQL將TIME的小時范圍擴發了,而且支持負值。
標准格式是"HH:MM:SS",但是不一定是這種格式,可以是"D HH:MM:SS"、"HH:MM"、"SS"、"D HH"、"D HH:MM"

"D HH:MM:SS"相當於是"(D*24+HH):MM:SS"
eg:插入的是"2 23:50:50"="71:50:50"
"HH:MM"
eg:"11:25"="11:25:00"
"SS"
eg:"30"="00:00:30"

3.
給DATE賦值
標准格式是"YYYY-MM-DD"、其他的還有"YYYY@MM@DD"、"YYYY.MM.DD"等
還可以用"YY-MM-DD"

4.
給DATETIME賦值
標准格式為"YYYY-MM-DD HH:MM:SS"
具體賦值方法與上面各種類型的方法相似。

5.
給TIMESTAMP賦值
TIMESTAMP的取值范圍比較小,沒有DATETIME的取值范圍大,因此輸入值時一定要保證在TIMESTAMP的范圍之內。它的插入也與插入其他日期和時間數據類型類似。
**插入當前時間
第一,可以使用CURRENT_TIMESTAMP;
第二,輸入NULL,系統自動輸入當前的TIMESTAMP;
第三,無任何輸入,系統自動輸入當前的TIMESTAMP。
另外有很特殊的一點:TIMESTAMP的數值是與時區相關。**

6.
當 MySQL遇到一個日期或時間類型的超出范圍或對於該類型不合法的值時,它將該值轉換為該類的"零"值。

列類型:"零"值
DATETIME:'0000-00-00 00:00:00'
DATE:'0000-00-00'
TIMESTAMP:00000000000000
TIME:'00:00:00'
YEAR:0000

datetime和timestamp的區別


datetime
1. 占用8個字節
2. 允許為空值,可以自定義值,系統不會自動修改其值。
3. 實際格式儲存
4. 與時區無關
5. 不可以設定默認值,所以在不允許為空值的情況下,必須手動指定datetime字段的值才可以成功插入數據。
6. 可以在指定datetime字段的值的時候使用now()變量來自動插入系統的當前時間。
結論:datetime類型適合用來記錄數據的原始的創建時間,因為無論你怎么更改記錄中其他字段的值,datetime字段的值都不會改變,除非你手動更改它。

timestamp
1. 占用4個字節
2. 允許為空值,但是不可以自定義值,所以為空值時沒有任何意義。
3. TIMESTAMP值不能早於1970或晚於2037。這說明一個日期,例如'1968-01-01',雖然對於DATETIME或DATE值是有效的,但對於TIMESTAMP值卻無效,如果分配給這樣一個對象將被轉換為0。

4. 值以UTC格式保存
5. 時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
6. 默認值為CURRENT_TIMESTAMP(),其實也就是當前的系統時間。
7. 數據庫會自動修改其值,所以在插入記錄時不需要指定timestamp字段的名稱和timestamp字段的值,你只需要在設計表的時候添加一個timestamp字段即可,插入后該字段的值會自動變為當前系統時間。
8. 若是設置了**ON UPDATE CURRENT_TIMESTAMP**以后任何時間修改表中的記錄時,對應記錄的timestamp值會自動被更新為當前的系統時間。
結論:timestamp類型適合用來記錄數據的最后修改時間,因為只要你更改了記錄中其他字段的值,timestamp字段的值都會被自動更新。

 


timestamp的默認值


自動UPDATE 和INSERT 到當前的時間
'CREATE_TIME' timestamp NOT NULL DEFAULT **CURRENT_TIMESTAMP** **ON UPDATE CURRENT_TIMESTAMP**
自動INSERT 到當前時間,不過不自動UPDATE
'CREATE_TIME' timestamp NOT NULL DEFAULT **CURRENT_TIMESTAMP**

**CURRENT_TIMESTAMP**
系統時間
**ON UPDATE CURRENT_TIMESTAMP**
修改現有記錄的時候都對這個數據列刷新

[timestamp的默認值](http://www.cnblogs.com/huangzhen/archive/2011/08/21/2147938.html)
[timestamp的默認值2](http://www.jb51.net/article/31872.htm)

慧聘中的實際應用


拿慧聘項目職位表為例:
我們需要記錄職位的創建時間和最新的更新時間。創建時間只在insert的時候新建一個時間戳,而更新時間則是,只要有對這條數據的更新操作,就更改時間戳。
timestamp的ON UPDATE CURRENT_TIMESTAMP屬性,會讓數據庫來幫我們在update的時候自動更新時間。
注意:圖形化界面來創建表的時候,默認值都是null,不是CURRENT_TIMESTAMP。就是說數據庫不會自動在insert的時候,插入當前時間戳。

![cmd-markdown-logo](http://7xrnr1.com1.z0.glb.clouddn.com/QQ%E6%88%AA%E5%9B%BE20160308185547.png)

圖形化界面的自動update,需要勾選上圖中的 根據當前時間戳更新選項

Mysql查看表的創建sql
SHOW CREATE TABLE BASE_USER

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM