最近在做一个项目 项目中 不同的小伙伴同时在不同的业务模块中用到了date,datetime,timestamp这三个类型 特别是datetime,timestamp这两个 如果不能理解到位  其实很容易滥用 ,相信很多小伙伴也是随意用 反正上线也出不了事。但现在不出事不一定代表未来不会出事 既然存在这两种类型  那想必必然存在差异,笔者接下来根据实际业务场景的不同分析一下 这三种类型的正确使用,也会谈到细微的各自区别。

datet类型最好理解 它支持的格式为“YYYY-MM-DD” 所以如果你的应用 无须精确到秒 最多只需精确到天话是可以使用这个类型的。

就拿笔者最近在做的一个电商项目 有一张网点库存表

这张表的作用是每个销售网点关于共同商品(这张表没有对应商品ID因为笔者做的这个项目商品是固定的由政府统一协调)这张表每天会根据实际情况 每个网点每天上线不同库存数据

那stock_date这个字段就可以设置为date类型了  因为业务场景只要精确到天就行。

那像datetime,timestamp这两个字段  先讲下他们的相同点和不同点

  • 相同点:两者都可用来表示YYYY-MM-DD HH:MM:SS[.fraction]类型的日期
  • 不同点:

    1)对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。

    而对于DATETIME,不做任何改变,基本上是原样输入和输出.

这就有点意思了 timestamp这个字段 通过不同的时区  会自动适应当前市区的值 像笔者只有有一个项目 部署在摩洛哥  但数据库又是共享同一个  如果国内的数据 按照国内的时间生成后  但在摩洛哥显示因为有时间差 显示的内容从那边的角度看是会有歧义的

  2)取值范围

    datetime取值范围:0000-00-00 00:00:00 ~ 9999-12-31 23:59:59;

    timestamp取值范围:1970-01-01 08:00:01!2038-01-19 11:14:07

不过timestamp从取值范围来看 limit居然只能到2038年 也是蛮坑的

最后查看了网上很多资料说timestamp会自更新 我实际在自己的环境试了一下

其实还是跟

`时间字段` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

如果没有ON UPDATE xx信息 就算你update了其他字段 这个字段也不会自动更新值 datetime也是如此 加上 就会自动更新

在客户端比如Navicat 等类似工具上 就是勾选这个

效果 这个时候 就算你没有主动更新这个字段 这个字段还是会实时更新当前值 时候那种update_time  能简单看出某条记录的最晚操作时间在生产环境中

好了 关于这三个字段的比较再结合生产场景就介绍到这里

Mysql 实战关于date,datetime,timestamp类型使用的更多相关文章

  1. 转 数据库中的 date datetime timestamp的区别

    转 数据库中的 date datetime timestamp的区别 DATETIME, DATE和TIMESTAMP类型是相关的.本文描述他们的特征,他们是如何类似的而又不同的. DATETIME类 ...

  2. 简述MySQL数据库中的Date,DateTime,TimeStamp和Time类型

    DATETIME类型 定义同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00' ...

  3. MySQL中DATETIME、DATE和TIMESTAMP类型的区别

    一.TIMESTAMP 显示格式:YYYY-MM-DD HH:MM:SS 时间范围:[ '1970-01-01 00:00:00'到'2037-12-31 23:59:59'] TIMESTAMP D ...

  4. Mysql 5.7 系列命令 timestamp类型的字段不能设默认值为“0000-00-00 00:00:00” 要设为`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新',

    一.show相关命令语句 1.查看表的索引 show index from tbl_name; 1 table:表名 non_unique:索引是非唯一的?.0否,唯一是索引的.1是,是非唯一索引.( ...

  5. oracle数据库的date和timestamp类型

    1.date类型存储数据的格式为年月日时分秒,可以精确到秒 timestamp类型存储数据的格式为年月日时分秒,可以精确到纳秒(9位) 2.date类型 Date类型的数据可以显示到年月日,也可以显示 ...

  6. MySQL中Date,DateTime,TimeStamp和Time的比较

    名称 显示格式 显示范围 应用场景 后台取值 Date YYYY-MM-DD 1601-01-01 到 9999-01-01 当业务需求中只需要精确到天时, 可以用这个时间格式 @JSONField( ...

  7. date,datetime,timestamp 的区别

    date 表示年月日,如YY-MM-DD datetime 表示年月日和时间信息,如YY-MM-DD HH:MM:SS datestamp 和datetime表示的信息相同,但时间范围不同 时间范围 ...

  8. mysql建库DATETIME、DATE 和 TIMESTAMP区别

    http://blog.sina.com.cn/s/blog_5f7b8c2c0100tf6t.html     DATETIME.DATE 和 TIMESTAMP 类型是相似的.本篇描述了它们的特性 ...

  9. MySQL问题记录——定义timestamp类型的数据

    MySQL问题记录——定义timestamp类型的数据 摘要:本文主要记录了在使用MySQL的过程中定义timestamp类型数据时遇到的问题以及解决方案. 问题重现 在Windows环境下安装MyS ...

随机推荐

  1. Flv.js记录(vue)

    下载 npm install flv.js 插入 import flvjs from 'flv.js'   第一种报错:Failed to read the 'buffered' property f ...

  2. PyQt(Python+Qt)学习随笔:QTreeWidgetItem项的子项排序sortChildren及获取项对应的树型部件对象方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.sortChildren对子项排序 树型部件QTreeWidget中的QTreeWidgetIt ...

  3. PyQt(Python+Qt)学习随笔:QAbstractScrollArea的用途

    老猿Python博文目录 老猿Python博客地址 QAbstractScrollArea部件提供了一个带有按需滚动条的滚动区域. QAbstractScrollArea是滚动区域的低级抽象.该区域提 ...

  4. 手写mini版MVC框架

    目录 1, Springmvc基本原理流程 2,注解开发 编写测试代码: 目录结构: 3,编写自定义DispatcherServlet中的初始化流程: 3.1 加载配置文件 3.2 扫描相关的类,扫描 ...

  5. sql绕过2

    0x00 sql注入理解 SQL注入能使攻击者绕过认证机制,完全控制远程服务器上的数据库. SQL是结构化查询语言的简称,它是访问数据库的事实标准.目前,大多数Web应用都使用SQL数据库来存放应用程 ...

  6. Shell命令和流程控制[linux常用命令的使用]

    在shell脚本中使用三类命令: unix命令 概念:管道.重定向.backtick 流程控制 1 unix命令 echo "some text":在屏幕上输出信息 ls:文件列表 ...

  7. 动态svg图片简单制作

    一.简介 #topics #no-box-shadow-img { box-shadow: none } 博主头像 svg图片格式不同于其它图片格式,svg图片本质上是一个xml文件,它内部是标记语言 ...

  8. 微信小程序template和组件

    template主要是展示,主要是在调用的页面中定义.用import方式引入,然后去使用,通常是单独建立一个文件夹 去管理,文件夹有两个文件wxml和wxss,wxml中 可以定义多个template ...

  9. Codeforces Edu Round 65 A-E

    A. Telephone Number 跟之前有一道必胜策略是一样的,\(n - 10\)位之前的数存在\(8\)即可. #include <iostream> #include < ...

  10. Java集合源码分析(四)——Vector

    简介 Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口. 和ArrayList不同,Ve ...