關於MySQL中儲存時間格式的問題
1、MySQL中儲存儲存時間的格式可以分為四種類型:
其中:
(1)、跟整數相關的兩種(INT和BIGINT)
(2)、MySQL內建的格式兩種(TIMESTAMP和DATETIME)
2、關於整數相關的兩種(INT和BIGINT):
UNSIGNED INT(32位)可以儲存的資料大概是43億,大概是10位,可以儲存精確到秒的Unix時間,最大儲存時間到2100年左右,所以足夠儲存,不需要用BIGINT UNSIGNED(64位)來儲存(如果只是精確到秒)需要比INT多一倍的儲存空間,即使我們指定了BIGINT(10),其實際的儲存空間與BIGINT是一樣的。
3、MySQL中內建的儲存日期的型別有:
DATETIME(8個位元組,即64位,顯示的時間範圍:1001年到9999年)和TIMESTAMP(4個位元組,即32位,顯示的時間範圍:1970到2038年)
4、舉例說明上述四種日期的用法:
CREATE TABLE tbl_tim_test(
id int UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(5) NOT NULL,
update_time int UNSIGNED,
active_time datetime default NULL,
create_time timestamp,
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci;
在上述的建表中timestamp會被自動設定為:
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
即timestamp會自動設定預設時間值。
insert into tbl_tim_test values(1, "tim", 1484400134, "2017-01-14", "2017-01-14");
其中時間戳1484400134是精確到秒。如果插入毫秒級別就會資料Out of range value錯誤。
插入後的資料為:
mysql> select * from tbl_tim_test;
+----+------+-------------+---------------------+---------------------+
| id | name | update_time | active_time | create_time |
+----+------+-------------+---------------------+---------------------+
| 1 | tim | 1484400134 | 2017-01-14 00:00:00 | 2017-01-14 00:00:00 |
+----+------+-------------+---------------------+---------------------+
即使沒有輸入小時分鐘秒,也會自動補零,可以精確到秒級。
insert into tbl_tim_test values(1, "tim", 1484400134, "2017-01-14 12:0:0", "2017-01-14");
即使插入這樣的資料MySQL也是可以解析的。
mysql> select * from tbl_tim_test;
+----+------+-------------+---------------------+---------------------+
| id | name | update_time | active_time | create_time |
+----+------+-------------+---------------------+---------------------+
| 1 | tim | 1484400134 | 2017-01-14 00:00:00 | 2017-01-14 00:00:00 |
| 2 | tim | 1484400134 | 2017-01-14 12:00:00 | 2017-01-14 00:00:00 |
+----+------+-------------+---------------------+---------------------+
以下這幾種都是可以儲存成上面的格式:
insert into tbl_tim_test values(2, "tim", 1484400134, "2017-01-14 12:0:01", "2017-01-14");
insert into tbl_tim_test values(4, "tim", 1484400134, "2017/01/14 12:0:01", "2017-01-14");
insert into tbl_tim_test values(5, "tim", 1484400134, "20170114", "2017-01-14");
insert into tbl_tim_test values(6, "tim", 1484400134, "20170114 ", "2017-01-14");
5、推薦日期格式使用MySQL內建的DATETIME,如果一定要用整數的話就用int unsigned,不要去用bigint。