mysql timestamp比较查询遇到的坑及解决

目录
  • timestamp比较查询遇到的坑
  • timestamp查询范围问题

timestamp比较查询遇到的坑

记得之前京东要求mysql建表的时候update_time 为timestamp,create_time为datetime。后来阿里的编码规范里要求两者都要是datetime类型的。

对于timestamp和datetime的区别好多地方都有介绍。有时在想为什么京东会要求update_time必须timestamp呢?难道是因为占用的空间少点?还是只有timestamp才能设置默认值(on update current_timestamp)?默认值datetime不是也可以设置么。后来百度了下,才知道 datetime支持设置默认值是在5.7的时候才支持的。京东这么要求可能之前使用的mysql版本过低,同时要求update_time 能自动更新的缘故吧。

现在在一家公司也是这么要求的 ,update_time设置为timestamp。结果遇到坑了。一同事发现很奇怪的问题:为什么date比较查询没有结果,而把日志里面打印的sql直接执行却能查询到结果??为什么会出现这种不一致的情况,我之前也没遇到过。解决问题嘛,总是让人兴奋的。

自己在本地试了下,确实是这样的,打印的日志没有问题,而正是日志‘迷惑'了我们,让人觉得很奇怪。看了下比较的字段 是 update_time, 正是timestamp类型的。经过阿里规范熏陶过,敏锐的觉得应该是类型的问题。所以自己百度了下发现是时区的问题。在数据库连接url后面加上serverTimezone=GMT%2B8 参数就行了。当然另一种方式就用datetime,这样能避免很多坑。

为什么会出现这样的问题?是因为应用服务器和mysql部署的服务器时区不一致导致的。这就是为什么我们看到的打印日志没有问题,但是却查询不到结果的原因(日志中看到的时间是本机的时区,但是当数据传输到mysql服务器时,是另一个时区的时间)

mysql 的date 也有这个问题。。。

timestamp查询范围问题

MySQL中timestamp类型日期,比如更新时间是2020-05-26,查询是时 update_time <= 2020-05-26,是查询不到的,需要转为 DATE_FORMAT(info.up_time,'%Y-%m-%d') <= '2020-05-26',具体原因不明,需要深入研究。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • MySQL慢查询的坑

    一条慢查询会造成什么后果?年轻时,我一直觉得不就是返回数据会慢一些么,用户体验变差?其实远远不止,我经历过几次线上事故,有一次就是由一条SQL慢查询导致的. 记得那是一条查询SQL,数据量万级时还保持在0.2秒内,随着某一段时间数据猛增,耗时一度达到了2-3秒!没有命中索引,导致全表扫描.explain 中extra显示:Using where; Using temporary; Using filesort,被迫使用了临时表排序,由于是高频查询,并发一起来很快就把DB线程池打满了,导致大量查询

  • mysql datetime查询异常问题解决

    mysql datetime查询异常 异常:Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp (2011-05-25 11:38:40) 描述:非空无默认值的Datetime类型字段,查询时程序报以下错误: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp 解决方法:数据库连接串添加zeroDateTime

  • SQL计算timestamp的差值的方法

    SQL计算timestamp的差值的方法 概述 有时候我们需要按照时间找出某些记录,比如说:算出离销售时间前1个小时的记录. 通常我们可以使用MYSQL的timestampdiff函数来做,但是这样没法使用到索引,如果数据量大的话,会造成慢查询. 用代码计算出时间后再传给SQL 我们可以利用JAVA代码,先把时间计算好,然后传给SQL语句,避免使用MYSQL的函数. public long xxxx(long sellTimeFrom){ Calendar calendar = Calendar

  • 为什么MySQL 使用timestamp可以无视时区问题.

    之前一直有过疑惑为什么MySQL数据库存timestamp可以无视时区问题. 在业务中也是一直使用Laravel框架,内置的Migration也是使用的timestamp类型字段, 也没太关心. 开始 查看当前数据库时区 mysql> show variables like "%time_zone%"; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | s

  • mysql timestamp比较查询遇到的坑及解决

    目录 timestamp比较查询遇到的坑 timestamp查询范围问题 timestamp比较查询遇到的坑 记得之前京东要求mysql建表的时候update_time 为timestamp,create_time为datetime.后来阿里的编码规范里要求两者都要是datetime类型的. 对于timestamp和datetime的区别好多地方都有介绍.有时在想为什么京东会要求update_time必须timestamp呢?难道是因为占用的空间少点?还是只有timestamp才能设置默认值(o

  • MySQL Like模糊查询速度太慢如何解决

    问题:明明建立了索引,为何Like模糊查询速度还是特别慢? Like是否使用索引? 1.like %keyword 索引失效,使用全表扫描.但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描. 2.like keyword% 索引有效. 3.like %keyword% 索引失效,也无法使用反向索引. 使用mysql的explain简单测试如下: explain select * from company_info where cname like '%小%'

  • MySQL联表查询基本操作之left-join常见的坑

    概述 对于中小体量的项目而言,联表查询是再常见不过的操作了,尤其是在做报表的时候.然而校对数据的时候,您发现坑了吗?本篇文章就 mysql 常用联表查询复现常见的坑. 基础环境 建表语句 DROP TABLE IF EXISTS `role`; CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `role_name` VARCHAR(50) DEFAULT NULL COMMENT '角色名', PRIMARY KEY (`i

  • Mysql多层子查询示例代码(收藏夹案例)

    用户表 create table if not exists tb_book ( book_id char(10) not null comment 'book主键', book_name char(30) not null comment '书名', book_type char(10) not null comment '类别', book_brief varchar(500) not null comment '简介', book_online_time timestamp not nul

  • MySQL中隐式转换的踩坑记录以及解决方法分享

    目录 复现当时的情景 根源所在 隐式转换的规则 避免进行隐式转换 本来是一个平静而美好的下午,其他部门的同事要一份数据报表临时汇报使用,因为系统目前没有这个维度的功能,所以需要写个SQL马上出一下,一个同事接到这个任务,于是开始在测试环境拼装这条 SQL,刚过了几分钟,同事已经自信的写好了这条SQL,于是拿给DBA,到线上跑一下,用客户端工具导出Excel 就好了,毕竟是临时方案嘛. 就在SQL执行了之后,意外发生了,先是等了一下,发现还没执行成功,猜测可能是数据量大的原因,但是随着时间滴滴答答

  • MySQL 开启慢查询日志的方法

    1.1 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 1.2 登录数据库查看 [root@localhost lib]# mysql –uroot 因为没有设置设置密码,有密码的在 mysql –uroot –p 接密码 1.2.1 进入MySql 查询是否开了慢查询 mysql> show variables like 'slow_query%'; +---------------------+----------

  • 详解mysql慢日志查询

    慢日志查询作用 慢日志查询的主要功能就是,记录sql语句中超过设定的时间阈值的查询语句.例如,一条查询sql语句,我们设置的阈值为1s,当这条查询语句的执行时间超过了1s,则将被写入到慢查询配置的日志中. 慢查询主要是为了我们做sql语句的优化功能. 慢日志查询配置项说明 打开mysql,通过以下命令查看相关配置: mysql> show variables like '%query%'; +------------------------------+---------------------

  • Mysql sql慢查询监控脚本代码实例

    1.修改my.cnf #整体的效果,全局开启表和日志文件都写,但是对于general_log只写表,对于slow_query_log,表和日志文件都记录. general_log=1#开启mysql执行sql的日志 slow_query_log=1#开启mysql慢sql的日志 #设置之后会影响general_log和slow_query_log, log_output=table,File#日志输出会写表,也会写日志文件,为了便于程序去统计,所以最好写表 #这里没配置general_log_f

  • 一次mysql迁移的方案与踩坑实战记录

    目录 背景 方案一:老数据备份 方案二:分表 方案三:迁移至tidb 重点说下同步老数据遇到的坑 最终同步脚本方案 总结 背景 由于历史业务数据采用mysql来存储的,其中有一张操作记录表video_log,每当用户创建.更新或者审核人员审核的时候,对应的video_log就会加一条日志,这个log表只有insert,可想而知,1个video对应多条log,一天10w video,平均统计一个video对应5条log,那么一天50w的log, 一个月50 * 30 = 1500w条记录, 一年就

  • MySQL常用慢查询分析工具详解

    目录 引言 1.调优工具mysqldumpslow 1.1调优工具常用设置 1.2 调优工具常用命令 1.3 慢日志文件分析 2. 调优工具show profile 引言 在日常的业务开发中MySQL 出现慢查询是很常见的 大部分情况下会分为两种情况: 1.业务增长太快 2.要么就是SQL 写的太xx了 所以对慢查询 SQL 进行分析和优化很重要其中 mysqldumpslow 是 MySQL 服务自带的一款很好的分析调优工具 1.调优工具mysqldumpslow 1.1调优工具常用设置 1.

随机推荐