mysql日期用什么类型

有5种类型:1、YEAR,用于表示年,格式为“YYYY”;2、TIME,用于只需要时间信息的值,格式为“HH:MM:SS”;3、DATE,用于仅需要日期值时,格式为“YYYY-MM-DD”;4、DATETIME,用于需要同时包含日期和时间信息的值,格式“YYYY-MM-DD HH:MM:SS”;5、TIMESTAMP,与DATETIME类似,用于需要同时包含日期和时间信息的值。

mysql日期用什么类型

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

MySQL 中有多个表示日期的数据类型:YEAR、TIME、DATE、DTAETIME、TIMESTAMP。

类型名称 日期格式 日期范围 存储需求

YEARYYYY1901 ~ 21551 个字节TIMEHH:MM:SS-838:59:59 ~ 838:59:593 个字节DATEYYYY-MM-DD1000-01-01 ~ 9999-12-33 个字节DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598 个字节TIMESTAMPYYYY-MM-DD HH:MM:SS1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC4 个字节

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。

示例

让我们看一下在TIME表中使用数据类型的示例。

首先,创建一个新表命名为tests 一个由四列:id,name,start_at,和end_at。start_at和end_at列的数据类型是TIME。

CREATE TABLE tests (    id INT PRIMARY KEY AUTO_INCREMENT,    name VARCHAR(255) NOT NULL,    start_at TIME,    end_at TIME);

其次,在tests表中插入一行。

INSERT INTO tests(name,start_at,end_at)VALUES('Test 1', '08:00:00','10:00:00');

第三,从tests表中查询数据。

SELECT     name, start_at, end_atFROM    tests;

1.png

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(),插入当前系统日期。

示例

我们来看看下面的例子。

首先,创建一个新表名为people,其中出生日期列为DATE数据类型。

CREATE TABLE people (    id INT AUTO_INCREMENT PRIMARY KEY,    first_name VARCHAR(50) NOT NULL,    last_name VARCHAR(50) NOT NULL,    birth_date DATE NOT NULL);

接下来,在people表中插入一行。

INSERT INTO people(first_name,last_name,birth_date)VALUES('John','Doe','1990-09-01');

然后,查询数据来自people表。

SELECT     first_name,     last_name,     birth_dateFROM    people;

2.png

之后,使用两位数年份格式将数据插入people表中。

INSERT INTO people(first_name,last_name,birth_date)VALUES('Jack','Daniel','01-09-01'),      ('Lily','Bush','80-09-01');

在第一行中,我们使用01(范围00-69)作为年份,因此MySQL将其转换为2001年。在第二行中,我们使用80(范围70-99)作为年份,MySQL将其转换为1980年。

最后,我们可以从people表中查询数据,以检查数据是否已根据转换规则进行转换。

SELECT     first_name,     last_name,     birth_dateFROM    people;

3.png

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。

DATETIME值可以包括具有YYYY-MM-DD HH:MM:SS[.fraction]例如的格式的尾随小数秒到微秒  2015-12-20 10:01:00.999999。包含小数秒精度时,DATETIME值需要更多存储空间,如下表所示:

分数秒精度 存储 (字节) 001, 213, 425, 63

例如,2015-12-20 10:01:00.999999 需要8个字节,5个字节用于2015-12-20 10:01:00 ,3个字节用于.999999 而2015-12-20 10:01:00.9  只需要6个字节,1个字节用于小数秒精度。

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 值未包含时间信息。

MySQL TIMESTAMP以UTC值存储。但是,MySQL将DATETIME值存储为没有时区的值。我们来看下面的例子。

首先,将当前连接的时区设置为+00:00。

SET time_zone = '+00:00';

接下来,创建一个表命名timestamp_n_datetime是由两列组成:ts与dt用TIMESTAMP和DATETIME使用下面的语句类型。

CREATE TABLE timestamp_n_datetime (    id INT AUTO_INCREMENT PRIMARY KEY,    ts TIMESTAMP,    dt DATETIME);

然后,将当前日期和时间插入 timestamp_n_datetime 表的两个ts和每dt列 ,

INSERT INTO timestamp_n_datetime(ts,dt)VALUES(NOW(),NOW());

之后,从timestamp_n_datetime表中查询数据。

SELECT     ts,     dtFROM    timestamp_n_datetime;

4.png

DATETIME和TIMESTAMP列中的值都相同。

最后,将连接的时区设置为+03:00并再次从timestamp_n_datetime表中查询数据。

SET time_zone = '+03:00'; SELECT     ts,     dtFROM    timestamp_n_datetime;

5.png

如您所见,TIMESTAMP列中的值不同。这是因为当我们更改时区时,TIMESTAMP列以UTC格式存储日期和时间值,根据新时区调整列的值。

这意味着如果您使用TIMESTAMP数据存储日期和时间值,则在将数据库移动到位于不同时区的服务器时应认真考虑。

【相关推荐:mysql视频教程】

以上就是mysql日期用什么类型的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/173856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2026年8月30日 16:11:28
Mac玩《‎长安幻想》攻略:苹果电脑畅玩iOS手游详细教程
下一篇 2026年8月30日 16:15:15

相关推荐

  • 如何在Debian 10(Buster)Linux上安装MySQL

    了解如何在debian 10(buster)linux上安装mysql。本指南将引导您完成在最新版本的debian系统上安装mysql 8或mysql 5.7的步骤。 第1步 – 准备工作 首先,确保您拥有Debian 10系统的shell访问权限。如果是远程系统,可以通过SSH连接。W…

    2026年9月24日
    1000
  • mysql存储过程在哪里写

    mysql存储过程在哪里写mysql存储过程在哪里写mysql存储过程在哪里写mysql存储过程在哪里写

    MySQL 存储过程存储在 MySQL 数据库中的 mysql.proc 表中。创建存储过程需要使用 CREATE PROCEDURE 语句,调用存储过程需要使用 CALL 语句。 MySQL 存储过程存储位置 存储过程在哪里写? MySQL 存储过程存储在 MySQL 数据库中。 详细说明: 存储…

    2026年9月24日 用户投稿
    500
  • 怎么在mysql中创建一个表 mysql新建数据表步骤教程

    在 mysql 中创建表的步骤和建议包括:1. 明确业务需求,设计表结构;2. 使用 create table 语句创建表,选择合适的数据类型和设置主键、索引;3. 考虑大数据量时使用分区;4. 设置正确的字符集和排序规则;5. 谨慎使用索引;6. 使用 if not exists 避免重复创建表。…

    2026年9月24日
    100
  • mysql全文索引是什么意思

    mysql全文索引是什么意思mysql全文索引是什么意思mysql全文索引是什么意思mysql全文索引是什么意思

    MySQL 全文索引是一种特殊索引,用于提高全文搜索性能,通过存储单词的前缀来工作。它提供快速全文搜索、简易查询和部分匹配。要创建全文索引,可以使用 CREATE FULLTEXT INDEX 语法,例如:CREATE FULLTEXT INDEX index_name ON table_name …

    2026年9月24日 用户投稿
    100
  • 学好mysql数据库能找到什么工作

    学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作学好mysql数据库能找到什么工作

    掌握 MySQL 数据库可为求职者带来众多工作机会,包括数据库管理员、数据库开发人员、数据分析师、数据科学家、商业智能分析师、软件工程师、Web 开发人员、测试工程师和数据挖掘工程师。 学好 MySQL 数据库能找到哪些工作? 精通 MySQL 数据库可为求职者创造众多职业机会,包括: 数据库管理员…

    2026年9月24日 用户投稿
    300
  • mysql的全文检索是什么

    mysql的全文检索是什么mysql的全文检索是什么mysql的全文检索是什么mysql的全文检索是什么

    摘要:MySQL 全文检索是一种在文本中搜索单词或短语的技术。其工作原理是:将文本拆分为标记并存储在全文索引中。匹配文本列中标记的搜索词或短语。提供快速搜索、相关性排序、模糊搜索和部分匹配功能。 MySQL 全文检索 全文检索是一种用于在文本内容中搜索单词或短语的技术。MySQL 中的全文检索功能允…

    2026年9月24日 用户投稿
    200
  • mysql中rand的用法 mysql随机函数使用教程

    mysql 的 rand() 函数返回 0 到 1 之间的随机浮点数,用于随机选择和排序数据。1)随机排序:select from your_table order by rand()。2)随机抽取记录:select from your_table order by rand() limit 10。…

    2026年9月24日
    300
  • mysql临时表如何使用_PHP中操作mysql临时表的具体步骤

    MySQL临时表仅在当前会话可见,连接关闭后自动删除,适合中间数据处理。使用PHP操作时,先通过mysqli或PDO建立数据库连接,再执行CREATE TEMPORARY TABLE语句创建临时表,随后可像普通表一样进行INSERT、SELECT及JOIN等操作。临时表可与永久表同名且优先被使用,支…

    2026年9月24日
    100
  • mysql中*是什么意思 mysql星号通配符解析

    在 mysql 中,星号()最常用于 select 语句中代表所有列,但应谨慎使用。1)它方便查看所有数据,但可能返回不必要的数据,影响性能。2)使用可能降低代码可维护性,建议明确列出所需列。3)在like操作符中,不是通配符,需用regexp。4)在视图中使用可能导致定义失效。5)可结合limit…

    2026年9月24日
    100
  • MySQL中SQL注入防范 SQL注入攻击的预防与应对措施

    sql注入的防范核心在于参数化查询。具体措施包括:1.始终使用参数化查询,将用户输入视为数据而非可执行代码;2.对输入进行过滤与校验,如验证格式、转义特殊字符;3.遵循最小权限原则,限制数据库账号权限;4.控制错误信息输出,避免暴露敏感细节;5.定期更新框架与插件,及时修补漏洞。这些方法结合使用能有…

    2026年9月24日
    100
  • 如何在mysql中升级高可用集群

    先确认版本兼容性、应用依赖及备份完整性,再按架构选择升级路径。对Group Replication或InnoDB Cluster采用滚动升级,先升从节点最后升主节点;MHA/Orchestrator架构先升备库再切换主库;PXC需停集群全量升级。替换二进制后启动实例并运行mysql_upgrade,…

    2026年9月24日
    100
  • MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案

    MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案MySQL怎样处理SQL注入风险 参数化查询与特殊字符过滤方案

    参数化查询和特殊字符过滤是防止sql注入的有效方法。1. 参数化查询通过预处理语句将sql结构与数据分离,用户输入被视为参数,不会被解释为sql命令;2. 特殊字符过滤通过转义或拒绝单引号、双引号等危险字符来阻止攻击;3. 定期审查mysql安全配置,包括更新版本、限制权限、启用日志、使用防火墙和扫…

    2026年9月24日 用户投稿
    100
  • 减少PHP与MySQL数据库通信的延迟

    减少php与mysql数据库通信的延迟可以通过以下策略:1. 优化数据库查询,使用索引提升查询速度;2. 减少数据库连接次数,使用连接池管理连接;3. 查询优化,使用explain分析查询计划;4. 使用缓存,如redis,减少数据库查询次数。这些方法能显著提升应用性能,但需权衡利弊,确保系统稳定性…

    2026年9月24日
    000
  • 解决MySQL事件event定义中文乱码的方法

    mysql的event事件处理中文乱码问题主要由字符集设置不当引起,解决方法包括以下步骤:1. 统一数据库、表和字段的字符集为utf8mb4,创建或修改时显式指定字符集;2. 设置连接层字符集,在连接后执行set names ‘utf8mb4’或在程序连接参数中指定chars…

    2026年9月24日
    400
  • Java中接口常量和类常量的使用区别

    接口常量默认public static final,用于行为契约但易导致职责模糊;类常量可用不同访问修饰符,更适合封装和维护。现代Java推荐使用专用常量类、枚举、私有静态常量或配置文件管理常量,以提升代码清晰度与可维护性。 Java中接口常量和类常量,核心区别在于它们的定义位置和隐式属性。接口常量…

    2026年9月24日
    100
  • mysql中in的用法详解 mysql in查询全面解析

    in操作符在mysql中用于检查值是否在指定列表内。1) 基本用法:select from users where name in (‘john’, ‘jane’, ‘jack’)。2) 子查询用法:select from or…

    2026年9月24日
    000
  • PHP 中如何将 JSON 数组值声明为变量

    本文介绍了如何在 PHP 中从数据库获取数据并将其编码为 JSON 格式,然后通过 AJAX 请求传递到另一个页面。重点讲解了如何在接收页面解析 JSON 数据,并将 JSON 数组中的特定值提取并赋值给变量,以便在后续的 PHP 函数中使用。 从数据库获取数据并编码为 JSON 首先,我们需要从数…

    2026年9月24日
    000
  • mysql中是什么意思 mysql语法符号含义解析

    mysql 中的符号和关键字是与数据库交互的基本工具,正确使用它们可以提高工作效率和查询准确性。1. 逗号(,)用于分隔列表中的元素,如列名和值。2. 点号(.)用于访问表中的列或调用函数。3. 星号(*)用于选择所有列,但应避免使用以提高查询性能。4. 百分号(%)用于 like 操作中的模式匹配…

    2026年9月24日
    100
  • PHP+MySQL培训课程的费用性价比分析

    php+mysql培训课程的性价比高,具体体现在:1.课程内容深度和广度,涵盖框架使用和项目经验;2.实用性和就业前景,提供实战项目和就业指导;3.师资力量和教学方式,名师能激发学习热情;4.学习资源和社区支持,提供丰富资料和交流平台。 在考虑报名PHP+MySQL培训课程之前,很多人都会问:这些课…

    2026年9月24日
    200
  • 使用MySQL命令行客户端进行交互式管理

    使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理使用MySQL命令行客户端进行交互式管理

    mysql命令行客户端的常用命令包括:1. 使用mysql -u 用户名 -p命令连接数据库;2. 执行show databases;查看所有数据库;3. 使用use 数据库名;选择数据库;4. 使用select * from 表名;查询数据;5. 使用insert into 表名 (列1, 列2)…

    2026年9月24日 用户投稿
    600

发表回复

登录后才能评论
关注微信