1. 程式人生 > >Mysql中的DATE、DATETIME、TIMESTAMP區別?

Mysql中的DATE、DATETIME、TIMESTAMP區別?

碰到問題查了一下,路還遠:

DATETIME、DATE 和 TIMESTAMP型別是相似的。查了一下它們的特性以及它們的相似點與不同點。

DATETIME型別:

         DATETIME 型別同時包含日期和時間資訊的值。即MySQL 以 'YYYY-MM-DD HH:MM:SS' 格式檢索與

顯示DATETIME 型別。支援的範圍是 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。(“支援”的含義是,儘管更早

的值可能工作,但不能保證他們均可以。)

DATE型別:

         DATE 型別只有日期值而沒有時間部分。MySQL 以 'YYYY-MM-DD' 格式檢索與顯示 DATE值。支援的範圍是

'1000-01-01' 到 '9999-12-31'。

TIMESTAMP型別:

         TIMESTAMP 列型別提供了一種型別,通過它你可以以當前操作的日期和時間自動地標記 Insert 或Update操作。

如果一張表中有多個 TIMESTAMP 列,只有第一個被自動更新。

         “完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的顯示尺寸創造,最常見的顯示尺寸是6、8、12、

和14。你可以在建立表時指定一個任意的顯示尺寸,但是定義列長為0或比14大均會被強制定義為列長14。列長在從

1~13範圍的奇數值尺寸均被強制為下一個更大的偶數。

列如:

定義欄位長度 強制欄位長度

TIMESTAMP(0) -> TIMESTAMP(14)

TIMESTAMP(15)-> TIMESTAMP(14)

TIMESTAMP(1) -> TIMESTAMP(2)

TIMESTAMP(3) -> TIMESTAMP(4)

1、所有的TIMESTAMP列都有同樣的儲存大小,

2、使用被指定的時期時間值的完整精度(14位)儲存合法的值不考慮顯示尺寸。

3、不合法的日期,將會被強制為0儲存

4、自動更新第一個 TIMESTAMP 列在下列任何條件下發生:

       1.列值沒有明確地在一個 Insert 或 LOAD DATA INFILE 語句中被指定。

       2.列值沒有明確地在一個 Update 語句中被指定,並且其它的一些列值已發生改變。(注意,當一個 Update

       3.設定一個列值為它原有值時,這將不會引起 TIMESTAMP 列的更新,因為,如果你設定一個列值為它當前值時,

     MySQL為了效率為忽略更新。)

       4.明確地以 NULL 設定 TIMESTAMP 列。

       5.第一個列以外其它 TIMESTAMP 列,可以設定到當前的日期和時間,只要將該列賦值 NULL 或 NOW()。

5、任何 TIMESTAMP 列均可以被設定一個不同於當前操作日期與時間的值,這通過為該列明確指定一個你所期望的值來實

現。這也適用於第一個TIMESTAMP 列。這個選擇性是很有用的,例如:當你希望 TIMESTAMP列儲存該記錄行被新新增時

的當前的日期和時間,但該值不再發生改變,無論以後是否對該記錄行進行過更新:

        1.當該記錄行被建立時,讓 MySQL 設定該列值。這將初始化該列為當前日期和時間。

        2.以後當你對該記錄行的其它列執行更新時,為 TIMESTAMP 列值明確地指定為它原來的值。

        3.使用 DATETIME 列,當新建記錄行時以 NOW()初始化該列,以後在對該記錄行進行更新時不再處理它。