本文主要介绍mysql中时间戳比较查询遇到的坑。很详细,有一定的参考价值。感兴趣的朋友一定要看完!
00-1010要求mysql在创建表时将update_time作为时间戳,将create_time作为datetime。后来,阿里的编码规范要求两者都是日期时间类型。
时间戳和日期时间之间的区别在很多地方都有介绍。有时候我想知道为什么JD.COM要求update_time必须是时间戳?是因为占用空间少吗?还是只能时间戳设置默认值(在update current_timestamp上)?还可以设置默认值datetime。后来百度了解到,datetime只有在5.7的时候才支持设置默认值。JD。COM的要求可能是之前用的mysql版本太低,update_time可以自动更新。
现在一个公司也需要。update_time设置为时间戳。结果,我跑进了一个坑。有同事发现一个奇怪的问题:为什么日期对比查询没有结果,但是直接执行日志中打印的sql就可以得到查询结果?我以前从未遇到过这种不一致的情况。解决问题总是令人兴奋的。
我在当地试过,这是真的。打印出来的日志没有错,但是就是日志‘迷惑’了我们,让人觉得很奇怪。比较字段是update_time,这正是时间戳类型。在受到阿里规范的影响后,我敏锐地意识到这应该是一种类型的问题。于是我搜索百度,发现是时区问题。在数据库连接url后添加serverTimezone=GMT 8参数。当然还有一种方法是使用datetime,可以避免很多坑。
为什么会有这样的问题?是应用服务器和mysql部署的服务器时区不一致造成的。这就是为什么我们看到的打印日志没有问题,但是找不到结果(日志中看到的时间是本地计算机的时区,但是当数据传输到mysql服务器时,是另一个时区的时间)。
Mysql的约会也有这个问题。
00-1010时间戳类型日期以MySQL为例,更新时间为2020年5月26日,查询时间为Update _ time=2020年5月26日,不能查询。需要更改为date _ format(信息。up _ time,' % y-%m-%d')=' 20。
以上就是文章《mysql中时间戳比较查询遇到的坑有哪些》的全部内容,感谢阅读!希望分享的内容对大家有所帮助。更多相关知识,请关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/116535.html