1.DATE、DATETIME和TIMESTAMP 表达的时间范围
| Type | Range | Remark |
| DATE | '1000-01-01' to '9999-12-31' | 只有日期部分,没有时间部分 |
| DATETIME | '1000-01-01 00:00:00' to '9999-12-31 23:59:59' | 时间格式为 YYYY-MM-DD hh:mm:ss,默认精确到秒 |
| TIMESTAMP | '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'UTC | 默认精确到秒 |
2.DATETIME和TIMESTAMP 最大时间精确度
5.7 之后的版本(其实应该说5.6.5),在默认的秒精确度上,可以带小数,最多带6位小数,即可以精确到 microseconds (6 digits) precision。
| Type | Range | Remark |
| DATETIME | '1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999' | 'YYYY-MM-DD hh:mm:ss[.fraction]' |
| TIMESTAMP | '1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.999999' | 'YYYY-MM-DD hh:mm:ss[.fraction]' |
3.DATETIME和TIMESTAMP 区别
(1) 时间范围不一样,TIMESTAMP 要小很多 ,且最大范围为2038-01-19 03:14:07.999999,到期也不远了。
(2)对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。
本文详细解析DATE、DATETIME和TIMESTAMP的数据类型范围,强调5.6.5版本后DATETIME和TIMESTAMP的微秒级精度,并对比两者在时间范围、存储和时区处理上的不同。

1850

被折叠的 条评论
为什么被折叠?



