MySql日期类型YEAR、TIME、DATE、DTAETIME、TIMESTAMP
- 1. MySql日期类型区别
- 2. YEAR类型
- 3. TIME 类型
- 3. DATE 类型
- 4. DATETIME 类型
- 5. TIMESTAMP 类型
- 5.1 TIMESTAMP 概述
- 5.2 TIMESTAMP 场景
1. MySql日期类型区别
类型名称 | 大小 | 格式 | 范围 | 用途 |
YEAR | 1 | YYYY | 1901 ~ 2155 | 日期值 |
TIME | 3 | HH:MM:SS | -838:59:59 ~ 838:59:59 | 时间值或持续时间 |
DATE | 3 | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 年份值 |
DATETIME | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 混合日期和时间值 |
TIMESTAMP | 4 | YYYY-MM-DD HH:MM:SS | ‘1970-01-01 00:00:01’ UTC to ‘2038-01-19 03:14:07’ UTC. | 混合日期和时间值,时间戳,不同时区计算 |
2. YEAR类型
YEAR 类型是一个单字节类型,用于表示年,在存储时只需要 1 个字节。可以使用各种格式指定 YEAR。
3. TIME 类型
TIME 类型用于只需要时间信息的值,在存储时需要 3 个字节。格式为 HH:MM:SS。HH 表示小时,MM 表示分钟,SS 表示秒。
3. DATE 类型
DATE 类型用于仅需要日期值时,没有时间部分,在存储时需要 3 个字节。日期格式为 ‘YYYY-MM-DD’,其中 YYYY 表示年,MM 表示月,DD 表示日。
很多人可能会把日期类型的字段的类型设置为 date或者 datetime,
但是这两个类型是无法设置默认值为当前日期的(或者有我不清楚)因为MySQL目前字段的默认值不支持函数。
4. DATETIME 类型
DATETIME 类型用于需要同时包含日期和时间信息的值,在存储时需要 8 个字节。日期格式为 ‘YYYY-MM-DD HH:MM:SS’,其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒。
5. TIMESTAMP 类型
5.1 TIMESTAMP 概述
TIMESTAMP 的显示格式与 DATETIME 相同,显示宽度固定在 19 个字符,日期格式为 YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。但是 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,为 '1970-01-01 00:00:01’UTC~’2038-01-19 03:14:07’UTC。在插入数据时,要保证在合法的取值范围内。
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
MySql官网说明:https://dev.mysql.com/doc/refman/8.0/en/datetime.html
5.2 TIMESTAMP 场景
因为TIMESTAMP 时间范围最大值只到2038-01-09,所以在创建数据库时间类型的时候需要注意,时间跨度是否符合业务要求,如果不符合就不适用此场景了,TIMESTAMP 本身是为了方便夸时区计算为题的,比如一架飞机,从中国北京起飞,降落在美国纽约,计算它从北京飞往纽约的飞行时间。飞机在北京时间 2021-10-10 11:05:00 从北京起飞,在纽约时间 2021-10-10 09:50:00 降落(JL8006)。
这个场景中,如果使用 TIMESTAMP 来存时间,起飞和降落时间的值,都会被转换成 UTC 时间,所以它们直接相减即可获得结果。但如果使用 DATATIME 格式存时间,还需要进行转换,才可以完成,容易出错。
参考文档
在 MySQL 中 DATETIME 和 TIMESTAMP 时间类型的区别及使用场景 - 实战案例讲解
MySQL DTAETIME、TIMESTAMP、DATE、TIME、YEAR(日期和时间类型)