DATE
、TIME
、YEAR
、DATETIME
、TIMESTAMP
等。这些类型用于存储不同类型的日期和时间数据,以满足不同场景的需求。MySQL 提供了多种数据类型来存储日期和时间,这些类型可以用来表示从年份到秒或微秒精度的时间值,了解每种类型的使用场景和限制对于设计高效的数据库至关重要。

MySQL 日期/时间类型概览
1. DATE 类型
占用空间:4 bytes
格式:’YYYYMMDD’
范围:10000101 至 99991231

说明:仅包含年月日,无时分秒,适用于只需要日期的场景。
2. TIME 类型
占用空间:3 bytes
格式:’HH:MM:SS’
范围:838:59:59 至 838:59:59

说明:仅包含时分秒,无年月,通常与 DATE 类型配合使用。
3. YEAR 类型
占用空间:1 byte(YEAR(1)), 2 bytes(YEAR(4))
格式:YEAR(4) ‘YYYY’,YEAR(1) ‘YY’
范围:YEAR(4) ‘1901’ 至 ‘2155’,YEAR(1) ’00’ 至 ’69’, ’70’ 至 ’99’
说明:YEAR(4) 表示四位数的年份,YEAR(1) 表示两位数的年份。
4. DATETIME 类型
占用空间:8 bytes
格式:’YYYYMMDD HH:MM:SS’
范围:10000101 00:00:00 至 99991231 23:59:59
说明:包含日期和时间,精确到秒,适用于需要同时记录日期和时间的场景。
5. TIMESTAMP 类型
占用空间:4 bytes
格式:’YYYYMMDD HH:MM:SS’
范围:19700101 00:00:01 UTC 至 20380119 03:14:07 UTC
说明:包含日期和时间,精确到秒,自动记录时间的变更,适用于记录数据修改时间戳。
6. TIMESTAMP(n) 类型
占用空间:4+n bytes
格式:同 TIMESTAMP,但小数部分有 n 位
范围:同 TIMESTAMP
说明:包含日期和时间,精确到小数点后 n 位,适用于需要毫秒级或更高精度的时间戳。
特性对比
类型 | 日期范围 | 时间范围 | 空间占用 | 精确度 |
DATE | 10000101 至 99991231 | 4 bytes | 日期 | |
TIME | 838:59:59 至 838:59:59 | 3 bytes | 时间 | |
YEAR | YEAR(4): 1901 至 2155 YEAR(1): ’00’ 至 ’99’ | 12 bytes | 年份 | |
DATETIME | 10000101 00:00:00 至 99991231 23:59:59 | 8 bytes | 日期+时间 | |
TIMESTAMP | 19700101 00:00:01 UTC 至 20380119 03:14:07 UTC | 4 bytes | 日期+时间 | |
TIMESTAMP(n) | 同上 | 4+n bytes | 日期+时间,小数 n 位 |
应用场景举例
DATE:用于生日、纪念日等只关注日期的场合。
TIME:常与 DATE 或 DATETIME 配合使用,用于记录一天中的具体时刻。
YEAR:适用于仅需年份信息的场景,如某些报表统计。
DATETIME:用于记录日志、事件等需要完整日期和时间的场景。
TIMESTAMP:适合记录数据的创建或修改时间,因其能自动更新。
TIMESTAMP(n):当需要记录具有小数部分的精确时间时使用,例如性能测试。
相关问题与解答
Q1: 如果需要存储一个事件发生的完整日期和时间,包括时区信息,应该选择哪种类型?
A1: 在MySQL中,DATETIME类型是用于存储日期和时间的标准类型,但它不存储时区信息,如果需要存储时区信息,可以额外使用一个字段来存储时区,或者考虑使用第三方库或自定义解决方案来实现这一需求。
Q2: TIMESTAMP类型的最大日期是2038年,如果担心应用会超过这个时间怎么办?
A2: 如果担心超出TIMESTAMP的范围,可以考虑使用DATETIME类型代替,因为它的范围更广,可以达到9999年,也可以考虑将系统和应用升级到支持更大时间范围的数据库系统。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复