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

文章讨论了在MySQL中使用Timestamp类型时遇到的时区问题,导致时间显示不准确。作者推荐使用DateTime类型,因为它支持时区,并提到了DateTime的不同精度。此外,文章还提及在MyBatis中进行日期时间比较时的注意事项,建议通过时间差判断而不是直接相等比较。
摘要由CSDN通过智能技术生成

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

后记

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值