日期時間類型
a.如果表示年月日,通常用DATE表示
b.如果表示年月日時分秒,通常用DATETIME表示
c.如果表示時分秒,通常同TIME表示
日期和時間類型 |
字節 |
最小值 |
最大值 |
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年的某一時刻 |
TIME | 3 | -838:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
d.如果只表示年份,可以用YEAR來表示,它比DATE占用更少的空間,一般YEAR有4位和2位的格式,默認為4位的格式,允許的值是1901~2155和0000,2位格式 的基本廢棄
e.可以看出每種日期都有一個有效值范圍,如果超出這個范圍系統會錯誤提示,並且以零值來進行存儲
datatime 0000-00-00 00:00:00
date 0000-00-00
timestamp 00000000000000
time 00:00:00
year 0000
創建date,datetime,time類型的表舉例
用now()函數插入當前日期
創建測試表t1,用來測試TIMESTAMP類型
創建的時候系統自動給加上了CURRENT_TIMESTAMP(系統日期),插入一個NULL值
果然就默認顯示了當前的系統時間,不過Mysql只給表中的第一個TIMESTAMP字段設置默認值,如果有第二個TIMESTAMP類型,則默認設置為0
在添加一個TIMESTAMP類型的字段
因此mysql中同一個表中只有一列的默認值為current_timestamp,強制修改會報錯的哦!!!
f. TIMESTAMP還有一個特性就是與時區有關,當插入日期時,會先轉化為本地時區后存放,而從數據庫里面取出時,也同樣將日期轉化為本地時區后顯示,
這樣2個不同的用戶看到的同一個日期可能是不一樣的
創建一個表
當前時區為東八區,結果顯示倆個值都是相同的
當修改時區為東九區的時候
此時,id1位timestamp,id2位datetime,兩者之間差了1個小時
所以timstamp插入和查詢都受當地時區的影響,更能反映出實際的日期,而DATETIME只能反映出插入時當地的時區,其他時區的人查看必然會出現誤差