热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Mysql时间日期类型

一、概述Mysql中有多种数据类型可以用于日期和时间的表示,不同的版本可能会存在差异,下面的表格中列出了Mysql5.7中所支持的日期和时间类型日期和时间类型存储占用磁盘空间大小最

一、概述

Mysql 中有多种数据类型可以用于日期和时间的表示,不同的版本可能会存在差异,下面的表格中列出了 Mysql 5.7 中所支持的日期和时间类型









































日期和时间类型存储占用磁盘空间大小最小值最大值
YEAR1 个字节19012155
TIME3 个字节-839:59:59839:59:59
DATE4 个字节1000-01-019999-12-31
TIMESTAMP4 个字节1970 年的某个时刻2038 年的某个时刻
DATETIME8 个字节1000-01-01 00:00:009999-12-31 00:00:00

每一种时间日期格式都有一个有效范围,如果超出这个时间范围,在默认的 SQLMode 下,系统会进行错误提示,并且都以 "零值" 来进行存储

 

二、各种类型的区别

每一种时间日期类型都有不同的使用场景,一般来说使用最多的是 TIME、DATE、TIMESTAMP、DATETIME,下面就来简单看一下这几种类型的区别

创建 test 表

CREATE TABLE `test` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键 id',
`d` date NOT NULL DEFAULT '1900-01-01' COMMENT '年月日格式',
`t` time NOT NULL DEFAULT '00:00:00' COMMENT '时间格式',
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '年月日时分秒',
`dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '年月日时分秒',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

需要注意的是 date 类型不能设置默认值 current_date, time 类型也不能设置默认值 current_time,需要用字符串设置一个默认的时间日期格式

现在使用 now() 函数插入一组数据

insert into test (d,t,ts,dt) values (now(),now(),now(),now());

查看插入的数据

从上面的信息可以得知

date 表示的是 年月日 格式

time 表示的是 时分秒 格式

timestamp 和 datetime 都是表示 年月日时分秒 格式,并且都可以设置默认值 CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 属性,使得日期列可以随其它列的更新而自动更新(一般建表时 update_time 字段设置为 default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)

timestamp 和 datetime 都可以表示 ''年月日 时分秒",但是它们之间还是存在一些区别的,具体如下

1、取值范围

timestamp 表示的范围较小,其取值范围从  1970 年的某个时刻  到 2038 年的某个时刻,而 datetime 的取值范围是 1000-01-01 00:00:00 到 9999-12-31 00:00:00

2、存储时占用空间大小

timestamp 存储时占用磁盘空间大小是 4 个字节,而 datetime 是 8 个字节

3、时区影响

timestamp 插入日期时,会先将日期时间转换为本地时区后存放,查询日期时也会先将日期转换为本地时区后显示,这样不同的时区用户看到的同一个日期可能是不一样的,由于 timestamp 插入和查询都受当地时区的影响,所以更能反映出实际的日期,而 datetime 只能反映出插入时当地的时区,其它时区的用户查看数据时必然会收到影响,也就是说 timestamp 会根据时区自适应,而 datetime 不会

 

三、应用场景

如何选择合适的日期时间类型

1、先分析需求,根据实际需要选择能够满足应用的最小存储的日期类型,如果只需要记录 "年份",那么选用存储只占用一个字节的 YEAR 类型就可以了,而不用选择需要使用 4 个字节来存储的 DATE 类型,这样不仅可以节约存储空间,还能提升表的操作性能

2、如果是要记录 "年月日时分秒",并且记录的年份跨度范围比较大,那么最好使用 DATETIME,而不要使用 TIMESTAMP,因为 TIMESTAMP 记录的时间范围是 1970~2038,如果超出该范围之后就会以零值来进行填充

3、如果记录的日期类型是要让不同时区的用户使用,那么最好选用 TIMESTAMP,因为日期时间类型中只有它可以和实际的时区相适应

 

 

 

 

 



推荐阅读
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文深入探讨了如何通过调整InnoDB的关键配置参数来优化MySQL的随机IO性能,涵盖了缓存、日志文件、预读机制等多个方面,帮助读者全面提升数据库系统的性能。 ... [详细]
  • 本文详细介绍如何下载并安装MySQL数据库(5.7.10版本),以及配置Navicat管理工具(免费版)。通过本指南,您将了解从下载到安装的完整流程,并掌握基本的数据库管理技能。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文探讨了在处理大量物联网设备时,如何合理设计关系型数据库来高效记录设备的上下线历史,确保数据的可维护性和扩展性。 ... [详细]
  • MySQL 用户创建失败的解决方案
    本文详细介绍了在 MySQL 中遇到用户创建失败问题时的解决方法,包括如何正确配置环境、执行命令以及常见错误排查技巧。通过逐步指导,帮助用户顺利添加和管理 MySQL 用户。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文详细介绍了如何使用ActionScript 3.0 (AS3) 连接并操作MySQL数据库。通过具体的代码示例和步骤说明,帮助开发者理解并实现这一过程。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
author-avatar
小小一株含羞草2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有