前言:時間戳(timestamp),一個能表示一份數據在某個特定時間之前已經存在的、 完整的、 可驗證的數據,通常是一個字符序列,唯一地標識某一刻的時間。使用數字簽名技術產生的數據, 簽名的對象包括了原始文件信息、 簽名參數、 簽名時間等信息。廣泛的運用在知識產權保護、 合同簽字、 金融帳務、 電子報價投標、 股票交易等方面。
一、MySQL中表示當前時間的方法:
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP()
NOW()
LOCALTIME
LOCALTIME()
LOCALTIMESTAMP
LOCALTIMESTAMP()
二、關於TIMESTAMP和DATETIME的比較
一個完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction],它可分為兩部分:date部分和time部分,其中,date部分對應格式中的“YYYY-MM-DD”,time部分對應格式中的“HH:MM:SS[.fraction]”。對於date字段來說,它只支持date部分,如果插入了time部分的內容,它會丟棄掉該部分的內容,並提示一個warning。
如下所示:
mysql> create table test(id int,hiredate date); Query OK, 0 rows affected (0.01 sec) mysql> insert into test values(1,'20180109000000'); Query OK, 1 row affected (0.00 sec) mysql> insert into test values(1,'20180109104400'); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> show warning; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'warning' at line 1 mysql> select * from test; +------+------------+ | id | update | +------+------------+ | 1 | 2018-1-09| | 2 | 2018-1-09| +------+------------+ 2 rows in set (0.00 sec)
注:第一個沒提示warning的原因在於它的time部分都是0
1. 占用8個字節
3. 實際格式儲存(Just stores what you have stored and retrieves the same thing which you have stored.)
4. 與時區無關(It has nothing to deal with the TIMEZONE and Conversion.)
1. 占用4個字節
3. TIMESTAMP值不能早於1970或晚於2037。這說明一個日期,例如'1968-01-01',雖然對於DATETIME或DATE值是有效的,但對於TIMESTAMP值卻無效,如果分配給這樣一個對象將被轉換為0。
4.值以UTC格式保存( it stores the number of milliseconds)
5.時區轉化 ,存儲時對當前的時區進行轉換,檢索時再轉換回當前的時區。
6. 默認值為CURRENT_TIMESTAMP(),其實也就是當前的系統時間。TIMESTAMP和DATETIME的相同點:
兩者都可用來表示YYYY-MM-DD HH:MM:SS[.fraction]類型的日期。
TIMESTAMP和DATETIME的不同點:
兩者的存儲方式不一樣
對於TIMESTAMP,它把客戶端插入的時間從當前時區轉化為UTC(世界標准時間)進行存儲。查詢時,將其又轉化為客戶端當前時區進行返回。
而對於DATETIME,不做任何改變,基本上是原樣輸入和輸出。
兩者所能存儲的時間范圍不一樣
timestamp所能存儲的時間范圍為:'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'。
datetime所能存儲的時間范圍為:'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。
TIMESTAMP的變體
1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在創建新記錄和修改現有記錄的時候都對這個數據列刷新
2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP
在創建新記錄的時候把這個字段設置為當前時間,但以后修改時,不再刷新它
3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
在創建新記錄的時候把這個字段設置為0,以后修改時刷新它
4,TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP
在創建新記錄的時候把這個字段設置為給定值,以后修改時刷新它
*當指定日期值時,當心某些缺陷: *
1、允許作為字符串指定值的寬松格式能被欺騙。例如,,因為“:”分隔符的使
用,值'10:11:12'可能看起來像時間值,但是如果在一個日期中使用,上下文將作
為年份被解釋成'2010-11-12'。值'10:45:15'將被變換到'0000-00-00',因為'45'
不是一個合法的月份。
2、以2位數字指定的年值是模糊的,因為世紀是未知的。MySQL使用下列規則
解釋2位年值: 在00-69范圍的年值被變換到2000-2069。 在范圍70-99的年值被變
換到1970-1999。