当前位置:   article > 正文

MySQL Timestamp(没有时区)和DateTime类型区别及MyBatis中where条件中时间比较的注意事项_mybatis mysql时间比较

mybatis mysql时间比较

Timestamp没有时区,建议使用DateTime

前些时候在一个项目里使用MySQL作为数据库,发现使用Timestamp类型时,时间是显示总是差几个小时,后来仔细研究才发现,MySQL的Timestamp是没有时区的,所以我们以JVM
系统时间保存到mysql以后,再取出来就差了几小时了。
后来研究了一下,才了现MySQL还有DateTime类型,而且DateTime类型是支持时区的。
另外,DateTime也分DateTime, DateTime(3), DateTime(6)几个精度,对应的精确到秒,毫秒和微秒,如果要给缺省值,它们分别对应是now(), now(3), now(6)。由于JVM系统时间只精确到毫秒,故推荐DateTime(3).
以前建议Current_Timestamp做缺省值应该不特别合适,除非你数据库和应用服务器在同一时区。
以前的文章

MyBatis中DateTime类型相等判断

由于日期时间型的精度差异,在MyBatis中where条件下直接用等号对比两个日期时间,可能会出现偏差,所以建议采用相减后差绝对值小于1毫秒来判定两个是否相同。

TIMESTAMPDIFF(MICROSECOND,  create_time, #{createTime}) < 1
  • 1

后记

网上看到说:对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。
而对于DATETIME,不做任何改变,基本上是原样输入和输出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/596748
推荐阅读
相关标签
  

闽ICP备14008679号