1. 程式人生 > >Mysql 建表時,日期時間型別選擇

Mysql 建表時,日期時間型別選擇

mysql(5.5)所支援的日期時間型別有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。

幾種型別比較如下

日期時間型別 佔用空間 日期格式 最小值 最大值 零值表示
 DATETIME  8 bytes  YYYY-MM-DD HH:MM:SS
 1000-01-01 00:00:00
9999-12-31 23:59:59 
0000-00-00 00:00:00
 TIMESTAMP  4 bytes  YYYY-MM-DD HH:MM:SS  19700101080001
2038 年的某個時刻
00000000000000
 DATE  4 bytes
 YYYY-MM-DD 1000-01-01 
9999-12-31 
0000-00-00
 TIME  3 bytes
 HH:MM:SS  -838:59:59 838:59:59 
00:00:00
 YEAR  1 bytes
 YYYY 1901 
2155 
0000

 DATETIME

     DATETIME 用於表示 年月日 時分秒,是 DATE 和 TIME 的組合,並且記錄的年份(見上表)比較長久。如果實際應用中有這樣的需求,就可以使用 DATETIME 型別。

 TIMESTAMP

  • TIMESTAMP 用於表示 年月日 時分秒,但是記錄的年份(見上表)比較短暫。
  • TIMESTAMP 和時區相關,更能反映當前時間。當插入日期時,會先轉換為本地時區後再存放;當查詢日期時,會將日期轉換為本地時區後再顯示。所以不同時區的人看到的同一時間是  不一樣的。
  • 表中的第一個 TIMESTAMP 列自動設定為系統時間(CURRENT_TIMESTAMP)。當插入或更新一行,但沒有明確給 TIMESTAMP 列賦值,也會自動設定為當前系統時間。如果表中有第二個 TIMESTAMP 列,則預設值設定為0000-00-00 00:00:00。
  • TIMESTAMP 的屬性受 Mysql 版本和伺服器 SQLMode 的影響較大。

     如果記錄的日期需要讓不同時區的人使用,最好使用 TIMESTAMP。

 DATE

    DATE 用於表示 年月日,如果實際應用值需要儲存 年月日 就可以使用 DATE。

 TIME

TIME 用於表示 時分秒,如果實際應用值需要儲存 時分秒 就可以使用 TIME。

 YEAR

    YEAR 用於表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 預設是4位。如果實際應用只儲存年份,那麼用 1 bytes 儲存 YEAR 型別完全可以。不但能夠節約儲存空間,還能提高表的操作效率。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

每種日期時間型別都有一個有效值範圍,如果超出這個範圍,在預設的SQLMode下會報錯,並以零值(見上表)儲存。

插入或更新時,日期時間型別允許“不嚴格”語法,以DATETIME為例(其他日期時間型別雷同):

  • YYYY-MM-DD HH:MM:SS 或 YY-MM-DD HH:MM:SS 格式的字串。任何符號都可以用作日期部分或時間部分的間隔符。例如:“14-06-18 14:54:10”、“14*06*18 14.54.10”、“14+06+18 14=54=10”是等價的。對於包含日期時間的字串值,如果月、日、時、分、秒的值小於10,不需要指定兩位數。例如:“2014-2-3 2:3:6”、“2014-02-03 02:03:06”是等價的。
  • YYYYMMDDHHMMSS 或 YYMMDDHHMMSS 格式的字串。如果字串對於日期時間型別是合法的就可以解釋為日期時間型別。例如:“20140618145410” 和 “140618145410”將被解釋為 “2014-06-18 14:54:10” ,但是 “20140618145480” 是不合法的(秒數不合法),將被解釋為 “0000-00-00 00:00:00”。
  • YYYYMMDDHHMMSS 或 YYMMDDHHMMSS 格式的數字。如果該數字對日期時間型別是合法的就可以解釋為日期時間型別。例如:“20140618145410” 和 “140618145410” 將被解釋為 “2014-06-18 14:54:10” 。數值的長度應為6、8、12、14。如果數值長度是 8 或 14 位長,則假定為 YYYYMMDD 或 YYYYMMDDHHMMSS 格式。如果數值為 6 或 12 位長,則假定為 YYMMDD 或 YYMMDDHHMMSS 格式。