赞
踩
前些时候在一个项目里使用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中where条件下直接用等号对比两个日期时间,可能会出现偏差,所以建议采用相减后差绝对值小于1毫秒来判定两个是否相同。
TIMESTAMPDIFF(MICROSECOND, create_time, #{createTime}) < 1
网上看到说:对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。
而对于DATETIME,不做任何改变,基本上是原样输入和输出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。