MySQL关系型数据库当存储时间数据时,建议使用时间字段类型。时间字段类型包括year,date,time,datetime和timestamp类型。
Data Type
Storage Required Before MySQL 5.6.4
Storage Required as of MySQL 5.6.4
YEAR
1 byte
1 byte
DATE
3 bytes
3 bytes
TIME
3 bytes
3 bytes + fractional seconds storage
DATETIME
8 bytes
5 bytes + fractional seconds storage
TIMESTAMP
4 bytes
4 bytes + fractional seconds storage
1、YEAR
记录年份;有year(2)和year(4)两种定义方式。
2、DATE
只显示日期,没有时间部分
MySQL检索并且以’YYYY-MM-DD’格式显示DATE值,支持的范围是 ‘1000-01-01’到’9999-12-31’。
3、TIME
数据类型表示一天中的时间
MySQL检索并且以”HH:MM:SS”格式显示TIME值,但允许使用字符串或数字为TIME列分配值。支持范围是’00:00:00’到’23:59:59’。
4、DATETIME
日期和时间的组合
MySQL检索并且以’YYYY-MM-DD HH:MM:SS’格式显示DATETIME值,但允许使用字符串或数字为DATETIME列分配值。支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59′
5、TIMESTAMP[(M)]
范围是’1970-01-01 00:00:00’到2037年。TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。
如果不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。
TIMESTAMP值返回后显示为’YYYY-MM-DD HH:MM:SS’格式的字符串,
显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0
一、DateTime默认值为当前时间
TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果有多个TIMESTAMP列,只有第一个自动更新。
自动更新第一个TIMESTAMP列在下列任何条件下发生:
1.列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。
2.列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)
3.你明确地设定TIMESTAMP列为NULL。
4.除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。
所以把日期类型 选择成timestamp 允许空就可以了
CREATE TABLE test (
uname varchar(50) NOT NULL,
updatetime timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果要在navicat下操作的话,将字段设置为timestamp,然后默认值写上CURRENT_TIMESTAMP即可。