主要日期时间类型概览

 

类型格式范围存储需求特点
YEARYYYY1901~21551字节只存储年份信息
TIMEHH:MM:SS-838:59:59 ~ 838:59:593字节可表示时间、时间间隔或持续时间
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-313字节只存储日期部分
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598字节日期时间组合,与时区无关
TIMESTAMPYYYY-MM-DD HH:MM:SS1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC4字节时间戳,自动转换时区

各类型详细说明

 

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


特性DATETIMETIMESTAMP
存储空间8字节4字节
时间范围1000-01-01 ~ 9999-12-311970-01-01 ~ 2038-01-19
时区处理与时区无关自动转换时区
自动更新不支持可设置为自动更新
NULL处理存储NULL值存储当前时间

                

使用建议

1.选择原则:

    只需要年份:YEAR

    只需要时间:TIME

    只需要日期:DATE

    需要日期时间且不考虑时区:DATETIME

    需要自动时区转换或记录时间戳:TIMESTAMP

 

2.输入技巧:

    使用标准格式可避免歧义

    对两位年份要特别注意解释规则

    TIME类型无冒号时注意解释规则

 

3.性能考虑:

    TIMESTAMP存储效率更高

    DATETIME范围更大但占用更多空间

 

4. 2038年问题:

    TIMESTAMP将在2038年达到上限

    长期系统应考虑使用DATETIME

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)