MySQL8.0下DATE,DATETIME和TIMESTAMP的自动初始化和更新
DATE日期类型
简单的来说,DATE表示的是没有时间的日期,以’YYYY-MM-DD’格式检索和显示值 。
而DATETIME和TIMESTAMP都是表示日期和时间,以’YYYY-MM-DD hh:mm:ss’格式检索和显示值。
相对来说,DATE类型很简单,下面主要解释下DATETIME和TIMESTAMP的相同点和不同点。
DATETIME和TIMESTAMP的不同
两种时间类型都可以表示日期和时间,都能保留到微妙(6位)精度,都支持自动初始化和更新,这些会在之后详细解释。
它们的不同点如下表所示:
不同点 | DATETIEM | TIMESTAMP |
---|---|---|
取值范围 | ‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’ | ‘1970-01-01 00:00:01’~‘2038-01-19 03:14:07’ |
是否支持时区自动变动 | 不支持 | 支持UTC时区自动变动 |
在之前的版本中TIMESTAMP相交DATETIME来说还可以自动初始化和更新,但是在8.0之后TIMESTAMP和DATETIME都支持了自动初始化和更新。所以比较重要的区别就在于是否支持时区自动变动。
什么是时区自动变动?
假设当前为UTC+8:00时区,分别以DATETIME和TIMESTAMP存入时间为2019-01-01 12:00:00
当时区切换为UTC+7:00时区时:
时间类型 | 日期时间 |
---|---|
DATETIME | 2019-01-01 12:00:00 |
TIMESTAMP | 2019-01-01 11:00:00 |
当切换回UTC+8:00时: