当前位置: 首页 > news >正文

MySQL 中常用的日期和时间类型

文章目录

    • DATE 类型的使用
    • TIME 类型的使用
    • DATETIME 类型的使用
    • TIMESTAMP 类型的使用

MySQL 有多种表示日期和时间的数据类型(在不同版本中支持的日期与时间类型可能有所差异),其中实际开发中常用的日期和时间类型有 TIMEDATEDATETIMETIMESTAMP 四种类型。

常用日期和时间类型及说明:

数据类型说明
DATE用于表示年、月、日
TIME用于表示时、分、秒
DATETIME用于表于年、月、日、时、分、秒
TIMESTAMP用于表示带时区的年、月、日、时、分、秒

常用日期和时间类型的存储格式、范围及占用字节:

数据类型存储格式范围占用字节
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-313
TIMEHH:MM:SS-838:59:59 ~ 838:59:593
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

为什么时间类型 TIME 的取值范围不是 -23:59:59 ~ 23:59:59?

原因是 MySQL 设计的 TIME 类型,不仅可以表示一天之内的时间,而且还可以用来表示一个时间间隔,这个时间间隔可以超过 24 小时。

在实际开发中,使用最多的日期和时间类型是 DATETIME。这是因为 DATETIME 数据类型包括完整的日期和时间信息,取值范围大,使用方便。但是需要注意的是,一般存注册时间、商品发布时间等,不建议使用 DATETIME 存储,而是建议使用时间戳(TIMESTAMP),因为 DATETIME 虽然直观,但不便于时间的比较与计算。

DATE 类型的使用

DATE 类型的使用,即向 DATE 类型的字段插入数据,可以分为如下几种情况:

  • DATE 类型的字段支持以 'YYYY-MM-DD' 格式或者 'YYYYMMDD' 格式的字符串日期的插入,但是字符串的范围需要在 1000-01-019999-12-03 之间。如果插入 'YYYMMDD' 格式的字符串,那么 'YYYMMDD' 会被转化为 'YYYY-MM-DD' 格式。
  • DATE 类型的字段支持以 'YY-MM-DD' 格式或者 'YYMMDD' 格式的字符串日期的插入,即当年份为两位数时,如果年份部分取值为 00 到 69 则会被转化为 2000 到 2069 年;而如果年份部分取值为 70 到 99 则会被转化为 1970 到 1999。
  • 使用 CURRENT_DATE() 函数或者 NOW() 函数会插入当前系统的日期。

TIME 类型的使用

TIME 类型的使用,即向 TIME 类型的字段插入数据,可以分为如下几种情况:

  • TIME 类型的字段支持 'D HH:MM:SS''HH:MM:SS''HH:MM''D HH:MM''D HH''SS' 多种格式字符串的插入。其中,D 表示天,其最小值为 0,最大值为 34。

    如果使用带有 D 格式的字符串插入 TIME 类型的字段时,D 会被转化为小时,计算格式为 D*24+HH。例如:

    -- 格式 'D HH:MM'
    INSERT INTO test_time (time_column) VALUES ('1 06:15');
    -- D = 1,HH = 6,转换后的小时数为 1 * 24 + 6 = 30
    -- 实际存储的时间为 30:15:00
    

    当使用带有冒号并且不带 D 的字符串表示时间时,表示当天的时间,例如 12:10 表示 12:10:00,而不是 00:12:10。

  • TIME 类型的字段被插入的字符串格式为 'HHMMSS' 时,如果插入一个不合法的字符串或者数字,MySQL 在存储数据时,会将其自动转化为 00:00:00 进行存储。这里所说的 “不合法”,一般指的是不符合时间规范,像小时超过 23、分钟或秒超过 59,或者字符串长度不对等情况。

  • 使用 CURRENT_TIME() 函数或者 NOW() 函数会插入当前系统的时间。

DATETIME 类型的使用

DATETIME 类型的使用,即向 DATETIME 类型的字段插入数据,可以分为如下几种情况:

  • ‘YYYY-MM-DD HH:MM:SS’ 格式或者 ‘YYYYMMDDHHMMSS’ 格式的字符串插入 DATETIME 类型的字段时,最小值为 1000-01-01 00:00:00,最大值为 9999-12-03 23:59:59。以 ‘YYYYMMDDHHMMSS’ 格式的数字插入 DATETIME 类型的字段时,会被转化为 ‘YYYY-MM-DD HH:MM:SS’ 格式。
  • ‘YY-MM-DD HH:MM:SS’ 格式或者 'YYMMDDHHMMSS' 格式的字符串插入 DATETIME 类型的字段时,即当年份为两位数时,如果年份部分取值为 00 到 69 则会被转化为 2000 到 2069 年;而如果年份部分取值 70 到 99 表示 1970 到 1999。
  • 使用 CURRENT_TIME() 函数或者 NOW() 函数会插入当前系统的日期时间。

TIMESTAMP 类型的使用

TIMESTAMPDATETIME 的使用基本相同。但是需要注意的是,TIMESTAMP 类型存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用 TIMESTAMP 存储的同一个时间值,在不同的时区查询时会显示不同的时间。

TIMESTAMPDATETIME 有如下区别:

  • TIMESTAMP 存储空间比较小,表示的日期时间范围也比较小;
  • TIMESTAMP 底层存储的是距离 1970-01-01 00:00:00 毫秒的毫秒值,而 DATETIME 存储则是日期时间。两个日期比较大小或日期计算时,TIMESTAMP 相较于 DATETIME 更方便于时间的比较与计算,并且比较与计算时使用 TIMESTAMP 性能相较更高。
  • TIMESTAMP 与时区有关。TIMESTAMP 会根据用户的时区不同,显示不同的结果。而 DATETIME 则只能反映出插入时当地的时区,其他时区的人查看数据必然会有误差的。

相关文章:

  • Nuxt2中全局路由守卫的写法(含Nuxt3写法和变化)
  • 01背包问题二维数组和一维数组间的区别
  • RAG优化:python从零实现Proposition Chunking[命题分块]让 RAG不再“断章取义”,从此“言之有物”!
  • 基于mediapipe深度学习和限定半径最近邻分类树算法的人体摔倒检测系统python源码
  • 步进电机驱动电压对定位精度的深层影响分析
  • 机器学习的定义及分类
  • # 注意力机制
  • Spring Event 观察者模型及事件和消息队列之间的区别笔记
  • HMTL+JS+CSS实现贪吃蛇游戏,包含有一般模式,困难模式,还有无敌模式
  • 前端如何导入谷歌字体库
  • arm_mat_init_f32用法 dsp库
  • ansible-playbook 执行剧本报错: libselinux-python) aren‘t installed!
  • 智慧管理 | 共享茶室:可远程实时查看的物联网框架要怎么选?
  • Mysql-数据库、安装、登录
  • 使用string和string_view(四)——练习
  • 位置编码汇总 # 持续更新
  • AI提示词:自然景区智能客服
  • 计算机网络知识点汇总与复习——(二)物理层
  • # 深度学习基础算法:NN、RNN、CNN
  • 机器学习-04-分类算法-04-支持向量机SVM-案例
  • “多规合一”改革7年成效如何?自然资源部总规划师亮成绩单
  • 湖北宜化拟斥资超32亿加价回购“弃子”,布局上游煤炭业务
  • 商务部回应稀土出口管制问题
  • 河南省委常委会会议:坚持以案为鉴,深刻汲取教训
  • 沙青青评《通勤梦魇》︱“人机组合”的通勤之路
  • 日月谭天丨这轮中美关税会谈让台湾社会看清了什么?