1. 程式人生 > >關於MySQL中儲存時間格式的問題

關於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。