• Mysql 实战关于date,datetime,timestamp类型使用


        最近在做一个项目 项目中 不同的小伙伴同时在不同的业务模块中用到了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  能简单看出某条记录的最晚操作时间在生产环境中

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

  • 相关阅读:
    Luogu 3119 [USACO15JAN]草鉴定Grass Cownoisseur
    Luogu 4514 上帝造题的七分钟
    Luogu 1484 种树
    Luogu【P2904】跨河(DP)
    Luogu【P2065】贪心的果农(DP)
    Luogu【P1725】琪露诺(单调队列,DP)
    二分图匹配
    单调队列
    Tarjan的强联通分量
    手写堆
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/12559658.html
Copyright © 2020-2023  润新知