主要日期时间类型概览
类型 | 格式 | 范围 | 存储需求 | 特点 |
---|---|---|---|---|
YEAR | YYYY | 1901~2155 | 1字节 | 只存储年份信息 |
TIME | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3字节 | 可表示时间、时间间隔或持续时间 |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 3字节 | 只存储日期部分 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8字节 | 日期时间组合,与时区无关 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC | 4字节 | 时间戳,自动转换时区 |
各类型详细说明
1. YEAR 类型
存储需求:1字节
输入格式:
4位字符串/数字:'2010' 或 2010 → 2010
2位字符串:'00'-'69' → 2000-2069;'70'-'99' → 1970-1999
2位数字:1-69 → 2001-2069;70-99 → 1970-1999
注意:数字0会被转换为0000,字符串'0'或'00'会被转换为2000
2. TIME 类型
存储需求:3字节
特殊格式:
'D HH:MM:SS':D表示天数(0-34),转换为小时(D*24+HH)
'HHMMSS':无分隔符格式,最右两位总是秒
重要提示:
'1112'会被解释为00:11:12(11分12秒),而非11:12:00
使用冒号则被看作当天时间:'11:12' = 11:12:00
3. DATE 类型
存储需求:3字节
输入格式:
'YYYY-MM-DD' 或 'YYYYMMDD'(推荐)
'YY-MM-DD' 或 'YYMMDD':YY解释同YEAR类型
数字格式:151231 → 2015-12-31
灵活性:允许使用各种标点作为分隔符(-, ., /, @等)
4. DATETIME 类型
存储需求:8字节
输入格式:
'YYYY-MM-DD HH:MM:SS' 或 'YYYYMMDDHHMMSS'
'YY-MM-DD HH:MM:SS' 或 'YYMMDDHHMMSS':YY解释同前
数字格式:20141231050505 → 2014-12-31 05:05:05
特点:与时区无关,存储输入的实际值
5. TIMESTAMP 类型
存储需求:4字节
特点:
以UTC格式存储,会进行时区转换
范围有限(2038年问题)
自动更新:可设置为插入或更新时自动设置为当前时间
与时区关系:
存储时转换为UTC
检索时转换回当前时区
关键区别:DATETIME vs TIMESTAMP
特性 | DATETIME | TIMESTAMP |
---|---|---|
存储空间 | 8字节 | 4字节 |
时间范围 | 1000-01-01 ~ 9999-12-31 | 1970-01-01 ~ 2038-01-19 |
时区处理 | 与时区无关 | 自动转换时区 |
自动更新 | 不支持 | 可设置为自动更新 |
NULL处理 | 存储NULL值 | 存储当前时间 |
使用建议
1.选择原则:
只需要年份:YEAR
只需要时间:TIME
只需要日期:DATE
需要日期时间且不考虑时区:DATETIME
需要自动时区转换或记录时间戳:TIMESTAMP
2.输入技巧:
使用标准格式可避免歧义
对两位年份要特别注意解释规则
TIME类型无冒号时注意解释规则
3.性能考虑:
TIMESTAMP存储效率更高
DATETIME范围更大但占用更多空间
4. 2038年问题:
TIMESTAMP将在2038年达到上限
长期系统应考虑使用DATETIME
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程