MySQL(17)MySQL数据类型:日期和时间类型

2023-11-09

日期和时间类型

MySQL 中有多处表示日期的数据类型:YEAR、TIME、DATE、DTAETIME、TIMESTAMP。当只记录年信息的时候,可以只使用 YEAR 类型。

每一个类型都有合法的取值范围,当指定确定不合法的值时,系统将“零”值插入数据库中。

下表中列出了 MySQL 中的日期与时间类型。

类型名称

日期格式

日期范围

存储需求

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-3

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

1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC

4 个字节

YEAR类型

YEAR 类型是一个单字节类型,用于表示年,在存储时只需要 1 个字节。可以使用各种格式指定 YEAR,如下所示:

以 4 位字符串或者 4 位数字格式表示的 YEAR,范围为 '1901'~'2155'。输入格式为 'YYYY' 或者 YYYY,例如,输入 '2010' 或 2010,插入数据库的值均为 2010。

以 2 位字符串格式表示的 YEAR,范围为 '00' 到 '99'。'00'~'69' 和 '70'~'99' 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 YEAR 值。'0' 与 '00' 的作用相同。插入超过取值范围的值将被转换为 2000。

以 2 位数字表示的 YEAR,范围为 1~99。1~99 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 YEAR 值。注意,在这里 0 值将被转换为 0000,而不是 2000。

提示:两位整数范围与两位字符串范围稍有不同。例如,插入 3000 年,读者可能会使用数字格式的 0 表示 YEAR,实际上,插入数据库的值为 0000,而不是所希望的 3000。只有使用字符串格式的 '0' 或 '00',才可以被正确解释为 3000,非法 YEAR值将被转换为 0000。

TIME 类型

TIME 类型用于只需要时间信息的值,在存储时需要 3 个字节。格式为 HH:MM:SS。HH 表示小时,MM 表示分钟,SS 表示秒。

TIME 类型的取值范围为 -838:59:59~838:59:59,小时部分如此大的原因是 TIME 类型不仅可以用于表示一天的时间(必须小于 24 小时),还可能是某个事件过去的时间或两个事件之间的时间间隔(可大于 24 小时,或者甚至为负)。

可以使用各种格式指定 TIME 值,如下所示。

'D HH:MM:SS' 格式的字符串。还可以使用这些“非严格”的语法:'HH:MM:SS'、'HH:MM'、'D HH' 或 'SS'。这里的 D 表示日,可以取 0~34 之间的值。在插入数据库时,D 被转换为小时保存,格式为 “D*24+HH”。

'HHMMSS' 格式、没有间隔符的字符串或者 HHMMSS 格式的数值,假定是有意义的时间。例如,'101112' 被理解为'10:11:12',但是 '106112' 是不合法的(它有一个没有意义的分钟部分),在存储时将变为 00:00:00。

提示:为 TIME 列分配简写值时应注意:如果没有冒号,MySQL 解释值时,假定最右边的两位表示秒。(MySQL 解释 TIME 值为过去的时间而不是当前的时间)。例如,读者可能认为 '1112' 和 1112 表示 11:12:00(即 11 点过 12 分钟),但MySQL 将它们解释为 00:11:12(即 11 分 12 秒)。同样 '12' 和 12 被解释为00:00:12。相反,TIME 值中如果使用冒号则肯定被看作当天的时间,也就是说,'11:12' 表示 11:12:00,而不是 00:11:12。

DATE 类型

DATE 类型用于仅需要日期值时,没有时间部分,在存储时需要 3 个字节。日期格式为 'YYYY-MM-DD',其中 YYYY 表示年,MM 表示月,DD 表示日。

在给 DATE 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATE 的日期格式即可。如下所示:

以 'YYYY-MM-DD' 或者 'YYYYMMDD' 字符中格式表示的日期,取值范围为 '1000-01-01'~'9999-12-3'。例如,输入 '2015-12-31' 或者 '20151231',插入数据库的日期为2015-12-31。

以 'YY-MM-DD' 或者 'YYMMDD' 字符串格式表示日期,在这里YY表示两位的年值。MySQL 解释两位年值的规则:'00~69' 范围的年值转换为 '2000~2069','70~99' 范围的年值转换为 '1970~1999'。例如,输入 '15-12-31',插入数据库的日期为 2015-12-31;输入 '991231',插入数据库的日期为 1999-12-31。

以 YYMMDD 数字格式表示的日期,与前面相似,00~69 范围的年值转换为 2000~2069,80~99 范围的年值转换为 1980~1999。例如,输入 151231,插入数据库的日期为 2015-12-31,输入 991231,插入数据库的日期为 1999-12-31。

使用 CURRENT_DATE 或者 NOW(),插入当前系统日期。

提示:MySQL 允许“不严格”语法:任何标点符号都可以用作日期部分之间的间隔符。例如,'98-11-31'、'98.11.31'、'98/11/31'和'98@11@31' 是等价的,这些值也可以正确地插入数据库。

DATETIME 类型

DATETIME 类型用于需要同时包含日期和时间信息的值,在存储时需要 8 个字节。日期格式为 'YYYY-MM-DD HH:MM:SS',其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒。

在给 DATETIME 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATETIME 的日期格式即可,如下所示。

以 'YYYY-MM-DD HH:MM:SS' 或者 'YYYYMMDDHHMMSS' 字符串格式表示的日期,取值范围为 '1000-01-01 00:00:00'~'9999-12-3 23:59:59'。例如,输入 '2014-12-31 05:05:05' 或者 '20141231050505’,插入数据库的 DATETIME 值都为 2014-12-31 05:05:05。

以 'YY-MM-DD HH:MM:SS' 或者 'YYMMDDHHMMSS' 字符串格式表示的日期,在这里 YY 表示两位的年值。与前面相同,'00~79' 范围的年值转换为 '2000~2079','80~99' 范围的年值转换为 '1980~1999'。例如,输入 '14-12-31 05:05:05',插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。

以 YYYYMMDDHHMMSS 或者 YYMMDDHHMMSS 数字格式表示的日期和时间。例如,输入 20141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 140505050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。

提示:MySQL 允许“不严格”语法:任何标点符号都可用作日期部分或时间部分之间的间隔符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+35'、'98/12/31 11*30*45' 和 '98@12@31 11^30^45' 是等价的,这些值都可以正确地插入数据库。

TIMESTAMP 类型

TIMESTAMP 的显示格式与 DATETIME 相同,显示宽度固定在 19 个字符,日期格式为 YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。但是 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,为 '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC。在插入数据时,要保证在合法的取值范围内。

提示:协调世界时(英:Coordinated Universal Time,法:Temps Universel Coordonné)又称为世界统一时间、世界标准时间、国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称 UTC。

TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:

DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;

而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。

提示:如果为一个 DATETIME 或 TIMESTAMP 对象分配一个 DATE 值,结果值的时间部分被设置为 '00:00:00',因此 DATE 值未包含时间信息。如果为一个 DATE 对象分配一个 DATETIME 或 TIMESTAMP 值,结果值的时间部分被删除,因此DATE 值未包含时间信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL(17)MySQL数据类型:日期和时间类型 的相关文章

随机推荐

  • Unity3D为3D物体添加点击事件

    1 相机添加脚本 ClickEvent using System Collections using System Collections Generic using UnityEngine using UnityEngine EventS
  • sqlserver数据库迁移到mysql的方法和步骤

    一 迁移方法 工具 用mysql yog 下载地址1 https download csdn net download LT 1029 12261398 下载地址2 http yunpan cn QazFaTkuUpwmf 提取码 2310
  • 编写一个函数,用来删除字符串中的空格

    程序代码 include
  • 苏小红版 c语言程序设计(第三版)系列实验题:学生成绩管理系统V2.0

    github https github com Jackie0Feng SAMS 系统需求描述 某班有最多不超过30人 具体人数由键盘输入 参加某门课的考试 用一维数组和函数指针作为函数参数编程实现如下学生成绩管理 1 录入每个学生的学号和
  • 数据库之桥

    前言 通俗地讲 就是如何使用 工具 eclipse 连接到 你的数据库 JDBC 简介 全称为 Java Database Connectivity 可以使用Java语言去操作数据库 通过数据库提供的Connector作为支持 对于不同的语
  • MyBatis中自动生成主键

    MyBatis中自动生成主键 详细 Mybatis 配置文件配置useGeneratedKeys 参数只针对 insert 语句生效 默认为 false 在INSERT语句中 我们为可以自动生成 auto generated 主键的列 ST
  • Maven镜像(mirror)

    使用镜像代替中央仓库 国内开发人员由于网络原因 直接从中央仓库下载构件时 速度较慢或不稳定 我们通常会使用中央仓库的国内镜像站来解决该问题 配置 Maven 镜像的方法也非常的简单 我们只需要在 Maven 安装目录中 setting xm
  • 如何更改git提交代码的用户名称

    桌面单击鼠标右键 点击Git Bash Here 出现弹窗 修改git提交者的名称 git config global user name 要修改的名称 查看git提交者的名称 git config user name
  • Python: 生成带用户昵称的头像

    Python 生成带用户昵称的头像 需求 新建用户后 根据用户输入的昵称生成图片 例 注册 钉钉 用户后 头像根据输入的名字生成 开发环境 Windows 10 Python 3 8 Pillow 8 1 2 实现 蛇皮皮蛋 Python创
  • 【千律】C++基础:函数的重载

    include
  • 易游网吧无盘服务器安装,易游无盘安装教程

    易游无盘安装教程 2021 02 19 00 59 49 简介 php去除nbsp的方法 首先创建一个PHP代码示例文件 然后通过 preg replace s nbsp xc2 xa0 strip tags val 方法去除所有nbsp即
  • Sublime Text3 SublimeREPL python

    首先什么是REPL A Read Eval Print Loop REPL is available both as a standalone program and easily includable in other programs
  • qt之利用lineEdit设置密码样式

    参考博客 https blog csdn net u012288722 article details 77850974 主要参考以上大神博客实现如下 可能需要加上头文件 include
  • v8学习---添加js全局函数

    v8学习 添加js全局函数 标签 v8 2013 11 10 10 11 951人阅读 评论 0 收藏 举报 分类 v8 12 版权声明 本文为博主原创文章 未经博主允许不得转载 cpp view plain copy include
  • URL 链接中 井号#、问号?、连接符& 分别有什么作用?

    井号 表示网页中的一个位置 被称之为锚点 常用于某个网页间不同位置的跳转 简单的说就是在一个网页中 URL 不变的情况下 通过添加 buy 的字符在 URL 最后可以跳转到当前网页中已经定义好的锚点 id buy 位置 同样 的改变也会增加
  • APPIcon生成

    有两种生成方法 比较常用 一种是设计师常用的 在线生成图标 https icon wuruihong com 支持 jpg png psd 文件 可以生成圆角 可以自定义大小 生成后可以预览 模拟手机屏幕的效果预览 第二种就是终端生成 利用
  • PyTorch&CUDA安装过程及测试

    PyTorch CUDA安装过程及测试 1 准备工作 1 1 Anaconda NVDIA驱动 之前安装过了Anaconda和NVIDIA驱动 所以直接跳过这几步 打开NVIDIA控制面板 帮助 gt 系统信息 gt 组件 查看自己的CUD
  • 亲!了解一下开源许可协议呗?

    哈喽 大家好 我是指北君 今天我来给大家简单讲讲开源许可协议 只有了解开源许可协议 才能合法合理地使用各种开源软件 并保护自己的合法权益 一 开源许可协议的目标 开源许可协议 也称 许可证 它是一些开源支持组织为了激励和保护开源软件开发者的
  • cortex M3/M4内核 特权级与用户级详解

    一 程序运行为什么要有用户级与特权级区分 用户级和特权级的实现是为了给存储器提供一种保护机制 让用户代码不能访问特定的存储区域 只有特权级级代码才能有权限访问特定的存储区域 防止用户代码或者应用代码意外或恶意访问操作系统的数据存储区域 一般
  • MySQL(17)MySQL数据类型:日期和时间类型

    日期和时间类型 MySQL 中有多处表示日期的数据类型 YEAR TIME DATE DTAETIME TIMESTAMP 当只记录年信息的时候 可以只使用 YEAR 类型 每一个类型都有合法的取值范围 当指定确定不合法的值时 系统将 零