首页
学习
活动
专区
圈层
工具
发布

mysql创建时间类型

基础概念

MySQL中的时间类型主要包括以下几种:

  • DATE: 用于存储日期值,格式为'YYYY-MM-DD'。
  • TIME: 用于存储时间值或持续时间,格式为'HH:MM:SS'。
  • DATETIME: 用于存储混合日期和时间值,格式为'YYYY-MM-DD HH:MM:SS'。
  • TIMESTAMP: 与DATETIME类似,但具有时区感知特性,并且存储空间更小。
  • YEAR: 用于存储年份值,格式为'YYYY'。

相关优势

  • 存储空间优化: TIMESTAMP类型相比DATETIME使用更少的存储空间(通常是4个字节对8个字节)。
  • 时区感知: TIMESTAMP类型能够自动转换为UTC,并在检索时转换回当前时区。
  • 灵活性: 不同的时间类型提供了不同的精度和范围,可以根据实际需求选择最合适的类型。

类型

  • DATE: 存储日期,范围从'1000-01-01'到'9999-12-31'。
  • TIME: 存储时间,范围从'-838:59:59'到'838:59:59'。
  • DATETIME: 存储日期和时间,范围从'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
  • TIMESTAMP: 存储日期和时间,范围从'1970-01-01 00:00:01' UTC到'2038-01-19 03:14:07' UTC。
  • YEAR: 存储年份,范围从1901到2155。

应用场景

  • DATE: 当只需要存储日期信息时使用,例如出生日期、节假日等。
  • TIME: 当需要存储时间信息或持续时间时使用,例如会议开始时间、课程时长等。
  • DATETIME: 当需要同时存储日期和时间信息时使用,例如事件发生的具体时刻。
  • TIMESTAMP: 当需要记录时间戳,并且关心时区转换时使用,例如日志记录、交易时间戳等。
  • YEAR: 当只需要存储年份信息时使用,例如出版年份、成立年份等。

遇到的问题及解决方法

问题:为什么不应该将TIMESTAMP列的默认值设置为CURRENT_TIMESTAMP?

原因:

  • 在MySQL 5.6.5之前的版本中,TIMESTAMP列的默认值设置为CURRENT_TIMESTAMP时,该列的值会在每次行被修改时自动更新,这可能导致性能问题。
  • 在多服务器复制环境中,CURRENT_TIMESTAMP可能导致数据不一致。

解决方法:

  • 使用触发器来更新TIMESTAMP列的值。
  • 在MySQL 5.6.5及更高版本中,可以使用DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP来分别设置默认值和更新行为。

示例代码

代码语言:txt
复制
CREATE TABLE example (
    id INT PRIMARY KEY AUTO_INCREMENT,
    event_date DATE,
    event_time TIME,
    event_datetime DATETIME,
    event_timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    event_year YEAR
);

参考链接

MySQL官方文档 - 日期和时间类型

请注意,以上信息是基于MySQL数据库的一般知识,具体实现可能会根据MySQL的不同版本有所差异。在实际应用中,建议参考具体版本的官方文档。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL时间类型差异

文章目录[隐藏] 时间格式化 DATETIME TIMESTAMP DATE TIME YEAR 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DATETIME 8 bytes YYYY-MM-DD...CURRENT_TIMESTAMP 默认值,创建自动插入时间 TIMESTAMP TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份(见上表)比较短暂,TIMESTAMP列必须有默认值,默认值可以为...TIMESTAMP 的属性受 Mysql 版本和服务器 SQLMode 的影响较大。 如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。...注:一般建表时候,创建时间用datetime,更新时间用timestamp。...如果实际应用只保存年份,那么用 1 bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率

3.8K20
  • 【mysql】日期与时间类型

    MySQL有多种表示日期和时间的数据类型,不同的版本可能有所差异,MySQL8.0版本支持的日期和时间类型主要有:YEAR类型、TIME类型、DATE类型、DATETIME类型和TIMESTAMP类型。...举例: 创建数据表,表中只包含一个DATE类型的字段f1。...(3)使用CURRENT_TIME()或者NOW(),会插入当前系统的时间。 举例: 创建数据表,表中包含一个TIME类型的字段f1。...使用函数CURRENT_TIMESTAMP()和NOW(),可以向DATETIME类型的字段插入系统的当前日期和时间。 举例: 创建数据表,表中包含一个DATETIME类型的字段dt。...如果向TIMESTAMP类型的字段插入的时间超出了TIMESTAMP类型的范围,则MySQL会抛出错误信息。 举例: 创建数据表,表中包含一个TIMESTAMP类型的字段ts。

    6K20

    MySQL 中的日期时间类型

    日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0。...TIMESTAMP 类型是个例外,给它设置一个超出范围的值时,将保存上该类型允许的最大值。...通过设置 MySQL 相关参数,日期类型可保存原本非法的值,比如开启 ALLOW_INVALID_DATES 设置项时,可设置日期类型保存一个 2009-11-31 值,但正常情况下我们知道 11 月哪来什么...比如给一个日期格式的列设置 10:11:12,虽然这个值看起来像时间类型,但还是可以正确在被解析成目标列的格式,即日期。...创建表定义列时,指定 DEFAULT CURRENT_TIMESTAMP 来使相应的日期时间列自动初始化。

    10.4K20

    MySQL日期和时间类型笔记

    最近在看《MySQL技术内幕:SQL编程》并做了笔记,这是一篇笔记类型博客,分享出来方便自己复习,也可以帮助其他人 一、日期时间类型所占空间对比 各种日期时间数据类型所占的空间: 类型 所占空间 DATETIME...注意: 更新表时,可以设置TIMESTAMP类型的列,自动更新时间为当前时间 列为TIMESTAMP的日期类型可以设置一个默认值,而DATETIME不支持 例子,验证一下,设置默认值和自动更新时间...四、YEAR和TIME类型对比 YEAR类型占用1字节,书中介绍定义时可以指定显示的宽度为YEAR(2)或者YEAR(4),不过在我的mysql版本5.7+验证,发现只能定义为YEAR或者YEAR(4)...,也就是新版是不支持YEAR(2)这种形式的 对于YEAR(4),其显示年份的范围为1901~2155;然后超过这个范围的话,mysql还可以写,不过被赋值为0000 TIME类型只占3字节,显示的范围为...函数 介绍一下MySQL比较常用的NOW、CURRENT_TIMESTAMP和SYSDATE函数 给个例子,用sleep函数,然后对比sleep函数执行前后,这几个函数获取的时间对比 SELECT NOW

    2.7K10

    mysql 字段时间类型的比较

    字段的时间类型分为: ,,,,; 下面就分别介绍这几种时间类型的区别 每个时间类型都有一个有效范围和一个零值,当指定的类型的值超过有效范围时,就会使用零值 YEAR 该类型表示年,格式为 有三种表示方法...:分:秒,尽管时间范围为0~23,但是为了表示某些特殊的时间,mysql将小时的范围扩大了,并且支持负值。....我们可以通过获取当前的值 DATE 该类型表示年-月-日,标准格式为,但是中还支持一些不严谨的格式:比如等其他的符号来分割 在插入数据的数据的也可以使用 年份的转换和上面的类型的规则一样的 可以使用...函数获取当前的值 DATETIME 该类型表示YYYY-MM-DD hh:mm:ss,可以看出和类型的结合体.所以赋值的规则时和上面和的时一样的 TIMESTAMP 该类型表示为YYYY-MM DD hh...哈哈,到年后就别用这个类型了 这只是一个简单的区分说明,具体时间类型的说明 请参考 官方文档 https://dev.mysql.com/doc/refman/5.7/en/date-and-time-types.html

    6.2K80

    MySQL数据类型--日期时间

    在这一路学习过来,每次不管看书还是网上看的资料,对于MySQL数据类型中的时间日期类型总是一扫而过,不曾停下来认认真真的研究学习。...最近在图书馆借了一本关于MysQL的书籍,打算全面的学习研究一遍。   在之前,我对于时间日期数据类型不怎么感冒,也没怎么用过这一类型。...在我的做项目里用到存贮时间的数据,我都是采用int整型数据类型来存储,即是存储时间戳。但是在后面学习MySQL优化的时候,就有一个原则就是存储数据时应采用最小占用空间的数据类型。...二、时间日期数据类型总概况    MySQL中有多种表示时间日期的数据类型,主要有YEAR、TIME、DATE、DATETIME、TIMESTAMP等。...四、小结   了解MySQL的日期时间数据类型对于选取一种适合存储类型是很有必要的。

    4.5K20

    mysql 关于时间类型的刨坑之路

    问题背景 前两天有做一个基于binglog的数据库实时同步,一张老数据表里有DATETIME、TIMESTAMP不同的时间字段类型,看起来值都是一样的,并且默认值都设置的 0000-00-00 00:00...由于本人之前一直习惯使用int存储时间戳(问题相对比较少,容易处理),所以对这几个时间字段类型了解不是很多. 后来参考了今天分享的这篇文档,终于有了一个基本的认识。 ?...TIMESTAMP 和 DATETIME 类型提供了自动初始化和更新当前的日期和时间。...MySQL将 TIMESTAMP 的值从当前时区转换成UTC进行存储,并且会从UTC转成当前时区进行检索(这样就不会发生出现别的类型例如DATETIME)。...MySQL 对指定字符串的值的格式要求比较宽松,在date部分和时间部份可以使用任何标点符号作为定界符。在一些事例中,这样的语法可以欺骗你。

    2.2K30

    MySQL 时间类型 DATE、DATETIME和TIMESTAMP

    MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the...创建2张测试表: create table testtime(id int,hiredate timestamp); create table testtime1(id int,hiredate datetime...查询命令 show variables like '%time_zone%'; 上述“CST”指的是MySQL所在主机的系统时间,是中国标准时间的缩写,China Standard Time UT...TIMESTAMP(fraction)中fraction值显示尺寸的格式如下表所示: 列类型 显示格式 TIMESTAMP(14) YYYYMMDDHHMMSS TIMESTAMP(12) YYMMDDHHMMSS...在创建表时可以指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14。列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数。

    4.6K30

    【MySQL笔记】数字类型、时间和日期类型、字符串类型

    ‍ 哈喽大家好,本次是MySQL数据库原理系列第六期 ⭐本期是MySQL的数据类型 系列专栏:MySQL数据库 笔者还是前端的菜鸟,还请大家多多指教呀~ 欢迎大佬指正,一起学习,一起加油!...总结 ---- 前言 使用MySQL数据库存储数据时,不同的数据类型决定了MySQL存储数据方式的不同。...MySQL数据库提供了多种数据类型,其中包括数字类型、时间和日期类型、字符串类型。...注意:若使用无符号数据类型,需要在数据类型右边加上UNSIGNED关键字来修饰 如下,我们创建一个my_int表,选取int和tinyint两种类型测试。...下面我们来看一个案例 创建表进行测试,在表中插入数值。我们会发现,当插入的小数部分超出范围时,会四舍五入,当插入的小数部分四舍五入导致整数部分进位时,会插入失败。

    5.7K20

    MySQL数据类型 -- 日期时间型

    https://blog.csdn.net/robinson_0612/article/details/82824107 在MySQL关系型数据库中,MySQL支持的数据类型非常丰富。...它主要分为3大类,即:数值型,日期时间性,字符型。而实际上这三类数据类型可以进一步的细分扩展,可以根据业务需要选择最适合的一种。本文主要介绍日期时间类型,并演示其用法。...一、日期时间型 MySQL支持的日期时间类型可以进一步细分,即可以分为日期型,时间型,日期时间型,时间戳等。如下图所示: ? 二、日期时间型存储需求 ? 三、日期时间型零值显示 ?...='+7:00'; Query OK, 0 rows affected (0.00 sec) -- 再次查看表,col4列上的时间则提前了一小时 -- 也即是时区会影响时间戳列 mysql> SELECT...-- 查看当前时间 mysql> SET @dt = NOW(); Query OK, 0 rows affected (0.03 sec) mysql> SELECT @dt; +---------

    1.7K20

    MySQL创建数据表和MySQL数据类型

    */ 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name...通过命令提示符创建表 通过 mysql> 命令窗口可以很简单的创建MySQL数据表。你可以使用 SQL 语句 CREATE TABLE 来创建数据表。...MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。...数值类型 MySQL支持所有标准SQL数值数据类型。...每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。 TIMESTAMP类型有专有的自动更新特性,将在后面描述。

    7.3K71

    【重学 MySQL】五十七、日期与时间类型

    【重学 MySQL】五十七、日期与时间类型 在MySQL中,日期与时间类型用于存储和操作日期和时间数据。这些类型根据所需存储的信息的精确度和范围而有所不同。...YEAR类型 用途:用于存储年份。 格式:通常为4位字符串或数字(YYYY),但MySQL也支持2位年份格式(YY),不过这种格式已经不推荐使用。...YEAR默认格式就是YYYY,没必要写成YEAR(4),从MySQL 8.0.19开始,不推荐使用指定显示宽度的YEAR(4)数据类型。 TIME类型 用途:用于存储时间,不包含日期部分。...MySQL允许“不严格”语法,任何标点符号都可用作日期部分或时间部分之间的间隔符。 TIMESTAMP类型 用途:用于存储日期和时间,与DATETIME类型类似,但支持时区转换。...虽然 MySQL 也支持 YEAR(年)、 TIME(时间)、DATE(日期),以及 TIMESTAMP 类型,但是在实际项目中,尽量用 DATETIME 类型。

    1.8K10

    MySQL 时间类型 datetime、bigint、timestamp,选哪个?

    摘要 本篇博客将深入讨论在MySQL数据库中选择合适的时间类型:datetime、bigint和timestamp。...通过比较它们的特性和适用场景,您将更好地理解何时应该选择哪种时间类型,以满足不同的数据存储需求。 引言 在数据库设计中,选择正确的时间类型对于确保数据的准确性和一致性至关重要。...MySQL提供了几种时间类型,其中datetime、bigint和timestamp都有自己的用途和限制。...order by time_long 耗时:0.775s 结论 在InnoDB存储引擎下,通过时间排序,性能bigint > timestamp > datetime 总结 在MySQL数据库中,选择适当的时间类型是数据库设计的重要一环...参考资料 MySQL Data Types Choosing the Right MySQL Data Type Datetime vs Timestamp in MySQL 小结 如果需要对时间字段进行操作

    4.4K10
    领券