在MySQL常用的场景中,会使用datetime和timestamp两种方式记录数据的时间,一般会精确到秒,主要用于记录每个表中数据的创建时间、修改时间等,甚至在设计表时,根据设计规范,会对每张表都添加一个时间的属性来记录数据的创建时间,也有可能再添加一个属性来记录数据的修改时间。那么下面的介绍会使得设置变得更加方便:
1.datetime
1)展现类型(存储内容):YYYY-MM-DD HH:MM:SS,固定占用8字节。
2)从5.6.5版本开始,可支持毫秒,datetime(n),其中n表示毫秒的长度。
3)默认值:可设置初始化值为当前时间,以及数据更新时自动更新修改时间。(若不需要默认值则无需设置)
如用户表需要记录用户信息的创建时间和修改时间,则创建表时对其进行定义:
create table sys_user ( id int not null auto_increment, user_name varchar(200) not null, password varchar(300) not null, create_time datetime not null default current_timestamp, update_time datetime not null default current_timestamp on update current_timestamp, primary key(id) );
通过设置当前时间(current_timestamp)进行默认值的设置。
2.timestamp
1)展现类型(存储内容):从'1970-01-01 00:00:00'开始到现在的毫秒数,固定占用4或7字节。
2)从5.6.5版本开始,可支持毫秒。不带毫秒是4字节,带毫秒数时就变成了7字节。因此当只有4字节时,其最大只能记录到'2038-01-19 00:00:00'。
3)默认值:可设置初始化值为当前时间,以及数据更新时自动更新修改时间。
将上述用户表中datetime类型修改为timestamp类型进行创建:
create table sys_user1 ( id int not null auto_increment, user_name varchar(200) not null, password varchar(300) not null, create_time timestamp not null default current_timestamp, update_time timestamp not null default current_timestamp on update current_timestamp, primary key(id) );
通过设置当前时间(current_timestamp)进行默认值的设置。
4)差异:timestamp的优点在于记录的是毫秒数,故具有时区属性。换句话说,就是此毫秒数,在任何时区不同的地方,都可以转化为当地的时间。缺点是存储的时间有局限性。相比之下,推荐使用datetime类型来记录时间。