datetime和timestamp都是MySQL中的日期类型。

datetime类型

以YYYY-MM-DD HH:MM:SS[.fraction]格局存储日期工夫:

datetime = YYYY-MM-DD HH:MM:SSdatetime(6) = YYYY-MM-DD HH:MM:SS.fraction

datetime类型与时区无关(其值不随时区变动),存储时占用8个字节。

timestamp类型

存储自1970年1月1日到以后工夫的秒数,跟datetime相似,也以以YYYY-MM-DD HH:MM:SS[.fraction]格局展现。

timestamp类型与时区无关,配置不同的时区时其值不同。

timestamp存储时占用4个字节,工夫范畴:1970-01-01 ~ 2038-01-19。

timestamp类型的字段,能够在DDL语义中定义主动批改(ON UPDATE):

`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()

demo

次要演示datetime与timestamp随时区变动的状况。

设置以后时区:

mysql> set time_zone='+8:00';Query OK, 0 rows affected (0.00 sec)

创立表并插入数据:

//d1 datetime类型; d2 timestamp类型mysql> create table t1(d1 datetime, d2 timestamp);Query OK, 0 rows affected (0.07 sec)mysql> insert into t1 values(now(), now());Query OK, 1 row affected (0.02 sec)

查看以后数据:

mysql> select * from t1;+---------------------+---------------------+| d1                  | d2                  |+---------------------+---------------------+| 2019-03-02 18:59:20 | 2019-03-02 18:59:20 |+---------------------+---------------------+1 row in set (0.01 sec)

批改时区:

mysql> set time_zone='+10:00';Query OK, 0 rows affected (0.00 sec)

再查问表数据:

mysql> select * from t1;+---------------------+---------------------+| d1                  | d2                  |+---------------------+---------------------+| 2019-03-02 18:59:20 | 2019-03-02 20:59:20 |+---------------------+---------------------+1 row in set (0.00 sec)

能够看到d1 datetime类型,其值不随时区变动;而d2 timestamp其值追随时区变动。