首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mysql - date、datetime、timestamp 的区别

date、datetime 的区别 顾名思义,date 日期,datetime 日期时间,所以 date 是 datetime 的日期部分 MySQL 以 格式检索和显示 datetime 值 YYYY-MM-DD...因为 timestamp 存储的是 UTC 时间,所以会有时区的概念,这也是区别于 datetime 地方之一 MySQL 对于 timestamp 字段值,会将客户端插入的时间从当前时区转换为 UTC...再进行存储;查询时,会从 UTC 转换回客户端当前时区再进行返回 默认情况下,每个连接的当前时区是服务器的时间 可以在每个连接的基础上设置时区,只要时区设置保持不变,该 timestamp 字段读写的值就会保持一致...5 个字节(有些教程会写 8 个,但官方文档目前 mysql8 中 datetime 是 5 个字节进行存储) 重点 它们在保存小数秒时,都将使用额外的空间(1-3 个字节) 如果存储 150w 条记录...,1 个字节的差异可以忽略不计 150 万条记录 * 每条记录 1 个额外字节/(1048576 字节/MB)= 1.43 MB timestamp 节省一个字节是有代价的 最开始也说了,timestamp

6.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据库日期类型字段设计,应该如何选择?

    1901 到 2155 1 字节 Oracle 数据库: Date 类型的内部编码为12 长度:占用7个字节 数据存储的每一位到第七位分别为:世纪,年,月,日,时,分,秒 TIMESTAMP是支持小数秒和时区的日期...对秒的精确度更高 TIMESTAMP WITH TIME ZONE 类型是 TIMESTAMP 的子类型,增加了时区支持,占用13字节的存储空间,最后两位用于保存时区信息 INTERVAL 用于表示一段时间或一个时间间隔的方法...在之后的设计里,还使用过 YYYYMMDDHHmmSST 格式,其中的“T”指时区,加入时区,带来的影响有: 日期时间字段就不能在使用数值来存储了,字符串比数字存储和检索的效率都要低。...应用程序需要加上额外的处理 带来的好处是: 便于 DBA 维护 到什么时候,即便没有看到数据库设计文档,都能看明白并准确理解数据库中一条信息中,这个字段保存到确切信息 使用这种方式的特点是牺牲一点效率,...总结一下,字段类型的选择,还是根据场景的需要来选择,从功能、效率要求、持续开发的要求、维护的要求几个方面综合考虑。

    2.1K20

    MySQL 保存日期,用哪种数据类型合适?datetime?timestamp?还是 int?

    日期算是我们在日常开发中经常用到的数据类型,一般来说一张表都有 createTime 和 updateTime 字段,MySQL 中针对日期也提供了很多种不同的数据类型,如: datetime timestamp...甚至也有人直接将日期存为字符串的。 那么到底该用哪种类型来保存日期呢? 1. 字符串 在这些类型中,首先应该排除掉的就是字符串了,很多新手小伙伴爱用字符串存储日期,但实际上这并不是一个很好的方案。...❝例如用户表中有一个字段 birthday,表示用户的生日,现在想要查询 2001 出生的所有用户,如果 birthday 是 日期类型,就可以使用 YEAR 函数,但是如果 birthday 是字符串类型...如果你的业务需要对应不同的国家时区,那么类型 TIMESTAMP 是一种不错的选择,TIMESTAMP 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样...我举个例子:假设我数据库目前的时区是 Asia/Shanghai: 现在有一个 user 表,数据如下: 其中,createTime 字段是 DATETIME,而 updateTime 是 TIMESTAMP

    1.9K20

    与亚马逊Amazon Device EDI进行测试都有哪些场景?

    示例如下:BEG00NE*G1234567**20070730以上报文表示订单编号为G1234567的一条新的常规采购订单,日期为2007年7月30日。...如果接受此订单,可以在855采购订单确认的DTM字段回复相应的计划发货日期以及计划交货日期。如果需要拒绝订单则需要在855中注明原因代码。具体位置在855报文的N9字段以及MSG字段。...场景6: 对于采购订单中包含的不合理交货日期的处理Amazon发来的850采购订单中,会包含要求的交货日期,被存放在850报文的DTM01为010时的DTM02字段。...3.856提前发货通知的时区问题涉及到的时间字段,DTM字段需要加入相应的时区信息。...涉及到的时区信息如下所示:01Equivalent to ISO P0102Equivalent to ISO P0203Equivalent to ISO P0304Equivalent to ISO

    36020

    老生常谈!数据库如何存储时间?你真的知道吗?

    1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手。...字符串存储的日期比较效率比较低(逐个字符进行比对),无法用日期相关的 API 进行计算和比较。...2.1 DateTime 类型没有时区信息的 DateTime 类型是没有时区信息的(时区无关) ,DateTime 类型保存的时间都是当前会话所设置的时区对应的时间。这样就会有什么问题呢?...Timestamp 和时区有关。Timestamp 类型字段的值会随着服务器时区的变化而变化,自动换算成相应的时间,说简单点就是在不同时区,查询到同一个条记录此字段的值会不一样。 下面实际演示一下!...” 3 再看 MySQL 日期类型存储空间 下图是 MySQL 5.6 版本中日期类型所占的存储空间: ? 可以看出 5.6.4 之后的 MySQL 多出了一个需要 0 ~ 3 字节的小数位。

    1.4K40

    MongoDB系列之StudioRobot 3T客户端

    鼠标放在某个连接上,会给出Connection概要信息: 鼠标放在某个Database上,会给出概要信息: 鼠标放在某个Collection上,会给出概要信息: 选中某个Connection,右键: 选中某个...不足的是,排序功能并不是全局排序,只是对当前页面50条(可修改)数据进行排序: 三种视图: Table View:以传统关系型数据库样式显示多条文档的多个字段 JSON View:以JSON格式显示 Tree...设置 默认查询50条数据,可改成10。 值得一提的是,Studio 3T支持修改UTC时区。...参考MongoDB日期存储与查询、@Query、嵌套字段查询实战总结,我们处于北京时间,即东八区,即UTC+8小时区。...查询MongoDB日期时,会发现数据库内存在大量半夜及凌晨时间段的数据(作为一款极低频App,这个时间是不正常的) 可通过设置UTC时区来调整日期类数据展示效果: 设置后再次执行查询结果如下: 如果同时调整展示格式为

    19310

    从AdventureWorks学习数据库建模——国际化

    他在ProductDescription的Description字段中用各种语言维护了一些描述信息,但是却并没有任何一个字段说明这一行维护的是什么语言。...这是一个很奇怪的设计,Culture和ProductDescription应该是一对多的关系,一种语言会维护很多句描述信息,而具体的一条描述信息,在写入Description的时候就应该已经确定了唯一的一种语言...CurrencyRate中的一条记录。...所以我们必须将时区作为一个日期的部分,考虑到数据库的模型中。...2.转换为UTC时间存到数据库 前面说到我们可以建立Timezone字段来存储时区信息,但是这样做最大的缺点就是不方便数据库中的排序。而且新建的字段也会额外占用存储空间,导致性能降低。

    81120

    POSTGRESQL 带时区的日期的技术与狠活

    首先POSTGRESQL 中的带有时区的日期格式包含了,时间和日期两种,这里官方建议大家使用日期类型的而不是直接使用时间类型的带有时区的类型。...pgconfig --configure 来查看当前的我们的POSTGRESQL 编译时的是否加载了 --with-system-tzdata 这个编译想,如果选择了这个项目则你使用的是操作系统提供的时区信息的支持...在具体时间的显示中,如果是带有时区的时间,是带有 + - 号和数字在后面表达具体的时区信息了,如上面表达是 东八时区 4 什么时候不能使用时区 with time zone 在进行分区表的过程中,...,并且在不同的数据库中,显示当地的时间的订单信息,那么我们怎么完成这个工作。...注明:如果需要固定使用不使用麻烦的字段日期改变,可以使用如下的自建函数将时间进行变化 create function now_utc() returns timestamp as $$ select

    3K20

    数据库的几种日期时间类型,你真的会用吗?

    Date now = new Date(); // 调用insert或update方法创建或更新日期字段。...字符串存储日期 把日期和时间当做一个字符串进行存储,进而将日期和时间拆分成两个字段,一个字段记录日期(如yyyy-MM-dd),另外一个字段存储时间(如:HH:mm:ss)的形式。...但DateTime中并未存储时区信息,只存储了本地时间。也就是说:如果你将服务器的时区进行修改,数据库中记录的日期和时间并不会对应的变化。...通常,针对此种情况,如果涉及到跨时区问题,可考虑单独用一个字段来存储时区。 Timestamp类型 Timestamp类型:也是既有日期又有时间的数据。存储和显示的格式跟Datetime一样。...Timestamp类型不仅存储了日期和时间,还存储了时区信息。如果以Timestamp类型存储,各数据库的实现会有所不相同,有的进行了内部时区自动转换。

    2.7K30

    Elasticsearch 时区问题 彻底搞懂

    概述 es中date类型字段, 底层写入转换规则: 如果写入的时间字段没有时区偏移量标识,elasticsearch 就会默认它为UTC时间,即0时区时间,并且转为(epoch time millisecond...)毫秒值保存 es中的date类型字段有映射属性format format 用来指定该字段时间日期的格式 未指定时默认为"format": "strict_date_optional_time||epoch_millis...这个也是最常见的时间日期格式, 其中时区偏移量标识为Z Z在某些日期格式下, 在具体的某一日期值后面出现时表示该时间为格林威治时,就是本初子午线所在地的时间 本初子午线, 即0度经线,亦称格林威治子午线或格林尼治子午线...会根据浏览器时区给创时间字段再加上时区偏移量的值 案例 比如我有这样一条记录, 可以看到这个文档中时间字段值为"@timestamp" : "2024-08-02T11:38:53.953Z", 这里Z...就是指定的0时区 在discover界面去过滤出这条记录, kibana就会给时间字段加8h如下 elasticsearch由java语言编写,里面使用的java中的时间日期格式类如下 DateTimeFormatter

    49632

    ES系列之一文带你避开日期类型存在的坑

    坑一,日期字段映射问题 我们知道ES有个Dynamic Mapping的机制,当索引不存在或者索引中的某些字段没有设置mapping属性,index的时候ES会自动创建索引并且根据传入的字段内容自动推断字段的格式...在ES查看的时候发现写入的字段变成了Long型失去了日期的属性,导致不能根据此字段进行日期相关的条件搜索。下面模拟下整个过程。...还有一种解决方案是你存储的时间字符串本身就带有时区信息,比如 “2016-07-15T12:58:17.136+0800”。 我们在ES进行查询或者聚合的时候,建议指定时区避免产生意想不到的结果。..."gte": "2015-01-01 00:00:00", "lte": "now" } } } } 加上这个时区信息...此外在使用Java Client聚合查询日期的时候,也需要注意时区问题,最好是指定时区进行搜索或者聚合。

    6.9K30

    别再使用 TIMESTAMP 作为日期字段~

    与 DATETIME 不同的是,若带有毫秒时,类型 TIMESTAMP 占用 7 个字节,而 DATETIME 无论是否存储毫秒信息,都占用 8 个字节。...如果想使用 TIMESTAMP 的时区功能,你可以通过下面的语句将之前的用户表 User 的注册时间字段类型从 DATETIME(6) 修改为 TIMESTAMP(6): ALTER TABLE User...在做表结构设计时,对日期字段的存储,开发人员通常会有 3 种选择:DATETIME、TIMESTAMP、INT。...所以,日期字段推荐使用 DATETIME,没有时区转化。即便使用 TIMESTAMP,也需要在数据库中显式地配置时区,而不是用系统时区。...= '+08:00'; 推荐日期类型使用 DATETIME,而不是 TIMESTAMP 和 INT 类型; 表结构设计时,每个核心业务表,推荐设计一个 last_modify_date 的字段,用以记录每条记录的最后修改时间

    1.1K10

    JAVA中计算两个日期时间的差值竟然也有这么多门道

    : 类名 含义说明 LocalDate 获取当前的日期信息,仅有简单的日期信息,不包含具体时间、不包含时区信息。...LocalTime 获取当前的时间信息,仅有简单的时间信息,不含具体的日期、时区信息。...LocalDateTime 可以看做是LocalDate和LocalTime的组合体,其同时含有日期信息与时间信息,但是依旧不包含任何时区信息。...OffsetDateTime 在LocalDateTime基础上增加了时区偏移量信息 ZonedDateTime 在OffsetDateTime基础上,增加了时区信息 ZoneOffset 时区偏移量信息...,比如北京时间东八区,则显示CST Z 时区偏移信息,比如北京时间东八区,则显示+0800 消失的8小时问题 日期字符串存入DB后差8小时 在后端与数据库交互的时候,可能会遇到一个问题,就是往DB中存储了一个时间字段之后

    6.5K21

    【JAVA-Day43】Java常用类Calendar解析

    我们需要使用Calendar类,因为它提供了强大的日期操作功能,包括日期字段的设置、增减日期、时区和区域处理、日期格式化和解析等功能。这使得它成为Java日期处理的不可或缺的一部分。...如何设置日期字段(年、月、日)?...set方法允许我们轻松设置日期字段,如前所示。 如何增加或减少日期? add方法可以帮助我们增加或减少日期字段,也已经在前面的示例中介绍过了。...显示带有时区信息的日期 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); Calendar calendar...显示假日信息:您可以将调整后的日期信息显示给用户,以便他们了解国家或地区的节假日。

    9710

    如何在代码中处理时间

    比如应用服务器和数据库服务器如果分别设置成了本地时区和零时区,并且在应用服务器上发送一条 SQL,以查询 2020-01-01 和 2020-01-02 之间的数据,那么这个时刻到底指的是什么呢?...如果一个表中某些时间字段是由应用服务器填写的,而另一些字段是由数据库服务器填写的,那么这种时区设置方面的差异就可能带来灾难性的错误。为了防范这种问题,最简单的办法是让这些服务器的时区保持一致。...不要使用“日期”刚才提到的问题,其表面问题在时区,本质问题却在于“日期”。这两个日期有什么问题呢?问题就在于它没有自带时区信息!所以,应用服务器和数据库服务器之间,将无法就时区达成一致!...各类信息丢失问题是很多 BUG 的根源,这里同样如此。更严重的是,它还丢失了时间信息。既然我要传的是“日期”,为什么还需要带时间信息呢?很简单,因为没有所谓“日期”!...否则即使我们用 11:59:59.999 来查询,仍然可能存在一条今天的数据出现在这个时间点之后。用 SQL 在查数据库时有一个坑:BETWEEN 是个闭区间,也就是说其结束时间是包含在统计范围内的。

    1.5K10

    【mysql】日期与时间类型

    日期与时间类型 日期与时间是重要的信息,在我们的系统中,几乎所有的数据表都用得到。原因是客户需要知道数据的时间标签,从而进行数据查询、统计和处理。...使用函数CURRENT_TIMESTAMP()和NOW(),可以向DATETIME类型的字段插入系统的当前日期和时间。 举例: 创建数据表,表中包含一个DATETIME类型的字段dt。...如果向TIMESTAMP类型的字段插入的时间超出了TIMESTAMP类型的范围,则MySQL会抛出错误信息。 举例: 创建数据表,表中包含一个TIMESTAMP类型的字段ts。...两个日期比较大小或日期计算时,TIMESTAMP更方便、更快。 TIMESTAMP和时区有关。TIMESTAMP会根据用户的时区不同,显示不同的结果。...因为这个数据类型包括了完整的日期和时间信息,取值范围也最大,使用起来比较方便。毕竟,如果日期时间信息分散在好几个字段,很不容易记,而且查询的时候,SQL 语句也会更加复杂。

    4.2K20
    领券