表示時間值的日期和時間類型爲DATETIME、DATE、TIMESTAMP、TIME和YEAR。mysql
每一個時間類型有一個有效值範圍和一個"零"值,當指定不合法的MySQL不能表示的值時使用"零"值。sql
TIMESTAMP類型有專有的自動更新特性,將在後面描述。ide
類型 | 大小 | 範圍 | 格式 | 用途 | |
---|---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 | |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 時間值或持續時間 | |
YEAR | 1 | 1901/2155 | YYYY | 年份值 | |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 | |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038測試 結束時間是第 2147483647 秒,北京時間 2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07spa |
YYYYMMDD HHMMS |
日期時間類型orm
MySQL數據類型 | 含義 |
date | 日期 '2008-12-2' |
time | 時間 '12:25:36' |
datetime | 日期時間 '2008-12-2 22:06:44' |
timestamp | 自動存儲記錄修改時間 |
注意:若定義一個字段爲timestamp,這個字段裏的時間數據會隨其餘字段修改的時候自動刷新,因此這個數據類型的字段能夠存放這條記錄最後被修改的時間。it
建立一個t8表,測試: mysql> create table t8 ( n1 year, n2 date, n3 time, n4 datetime ); Query OK, 0 rows affected (0.04 sec) #n1(year)插入"1901"值. mysql> insert into t8 (n1) values (1901); Query OK, 1 row affected (0.00 sec) #查看錶中的數據. mysql> select * from t8; +------+------+------+------+ | n1 | n2 | n3 | n4 | +------+------+------+------+ | 1901 | NULL | NULL | NULL | +------+------+------+------+ 1 row in set (0.00 sec) #n2(date)插入"2017-12-04"值. mysql> insert into t8 (n2) values ("2017-12-04"); Query OK, 1 row affected (0.04 sec) #查看錶中的數據. mysql> select * from t8; +------+------------+------+------+ | n1 | n2 | n3 | n4 | +------+------------+------+------+ | 1901 | NULL | NULL | NULL | | NULL | 2017-12-04 | NULL | NULL | +------+------------+------+------+ 2 rows in set (0.00 sec) #n3(time)插入"18:12:03"值. mysql> insert into t8 (n3) values ("18:12:03"); Query OK, 1 row affected (0.01 sec) mysql> select * from t8; +------+------------+----------+------+ | n1 | n2 | n3 | n4 | +------+------------+----------+------+ | 1901 | NULL | NULL | NULL | | NULL | 2017-12-04 | NULL | NULL | | NULL | NULL | 18:12:03 | NULL | +------+------------+----------+------+ 3 rows in set (0.00 sec) #n4(datetime)插入"2018-12-03 18:12:03"值. mysql> insert into t8 (n4) values ("2018-12-03 18:12:03"); Query OK, 1 row affected (0.00 sec) mysql> select * from t8; +------+------------+----------+---------------------+ | n1 | n2 | n3 | n4 | +------+------------+----------+---------------------+ | 1901 | NULL | NULL | NULL | | NULL | 2017-12-04 | NULL | NULL | | NULL | NULL | 18:12:03 | NULL | | NULL | NULL | NULL | 2018-12-03 18:12:03 | +------+------------+----------+---------------------+ 4 rows in set (0.00 sec) #timestamp屬性,自動更新時間戳. mysql> create table t9 ( -> id int, -> ts timestamp -> ); Query OK, 0 rows affected (0.00 sec) mysql> insert into t9 (id) values (1); Query OK, 1 row affected (0.00 sec) mysql> select * from t9; +------+---------------------+ | id | ts | +------+---------------------+ | 1 | 2019-01-26 19:04:40 | +------+---------------------+ 1 row in set (0.00 sec)
TIMESTAMP和DATETIME的不一樣點:table
二者的存儲方式不同class
對於TIMESTAMP,它把客戶端插入的時間從當前時區轉化爲UTC(世界標準時間)進行存儲。查詢時,將其又轉化爲客戶端當前時區進行返回。date
而對於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'。