目录
- 前言
- 1. 原理分析
- 2. datetime和timestamp的区别
- 3. 补充
前言
文章较短,但是体会很深!!!!
1. 原理分析
需求任务:填写数据的时候,如果时间不写,数据会默认用最新时间补充
一开始设置Navicat的datetime默认值为now(),但一直提示错误!
我们知道Mysql关于当前时间的表达方式有很多:
- NOW()
- LOCALTIME
- LOCALTIME()
- LOCALTIMESTAMP
- LOCALTIMESTAMP()
- CURRENT_TIMESTAMP
- CURRENT_TIMESTAMP()
最终只有这个通过:CURRENT_TIMESTAMP
如果设置为其他,出现如下错误:
正确的方式设置如下:
2. datetime和timestamp的区别
实战运用中,datetime和timestamp比较常用,但也有time、date等属性,具体差别如下:
类别 | 格式 | 取值范围 | 存储 |
---|---|---|---|
year | YYYY | 1901 到 2155 | 1byte |
time | HH:MM:SS | -838:59:59 到 838:59:59 | 3byte |
date | YYYY-MM-DD | 1000-01-01 到 9999-12-31 | 3byte |
datetime | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 8byte |
timestamp | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 到 2038-01-19 03:14:07 (UTC时间转换) | 4byte |
可以看出datetime和timestamp两者的格式一样、取值范围对于现在来说也没什么区别
在操作navicat的时候,datetime 和 timestamp 默认值为null,则保存的时候都是null值
唯一一个可以存储当前时间的是timestamp,将其属性设置为 CURRENT_TIMESTAMP
3. 补充
- Navicat 设置时间的属性还有date 、datetime等,但都没有最新的时间表示!
- 在mysql 中的字段应该这样表示:
如果是mysql版本比较低:(CURRENT_TIMESTAMP 版本较高可能失效,可试试now() )
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
mysql版本比较高:
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '修改时间',