mysql日期时间类型
日期类型 字节 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00
TimeStamp 4 197001010800001 2038年
Time 3 -838:59:59 838:59:59
year 1 1901 2155
知识点:
1 如果需要经常插入或者更新日期为当前时间 则通常使用Timestamp,timestamp值返回后显示为”YYYY-MM-DD HH:MM:SS”格式的字符串
2 如果只表示年份可以用year 他比date占用更少的空间year有2位或者4位格式的年默认为4位
3 每种日期类型都有一个有效值范围如果超出这个范围将以零值进行存储
DATE TIME DATETIME为最常用
实例:
CREATE TABLE t (d date , t time , dt datetime);
1
desc t
1
insert INTO t VALUES(NOW(),NOW(),NOW())
1
select * from t
1
DATETIME是date和time的结合
Timestamp实例
CREATE TABLE ttt (t timestamp);
1
系统自动给timestamp加上了默认值
INSERT INTO ttt VALUES(NULL)
1
select * from ttt
1
插入null 系统自动插入了当前时间戳
mysql中只给表中的第一个timestamp字段类型设置默认值为当前日期 如果有第二个timestamp类型则默认值设置为0
alter TABLE ttt add t2 timestamp;
1
SHOW CREATE TABLE ttt;
1
CREATE TABLE `ttt` (
`t` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`t2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1
2
3
4
mysql一个表中值允许一列的默认值为current_timestamp
INSERT INTO ttt VALUES(null,null)
1
update ttt set t2 = '2015-11-28 03:00:40' where t='2015-11-27 03:00:40'
1
t2 变了 t也变化成了当前时间 这是一个大坑 尤其是在一些需要按创建时间排序的需求中
所以结论是在mysql中使用时间字段timestamp时注意一定要 加上初始化的值 并且不能是current_timestamp
修改t为有初始值
alter TABLE ttt change `t` `t` timestamp default '0000-00-00 00:00:00' NOT NULL ;
desc ttt
1
2
此时再去
update ttt set t2 = '2015-11-28 04:00:40' where t='2015-11-27 03:02:50'
1
转载地址:https://blog.csdn.net/lucas421634258/article/details/50059859