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',具体原因不明,需要深入研究。

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

时间: 2021-11-22

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

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

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

python实现计算资源图标crc值的方法

本文实例讲述了python实现计算资源图标crc值的方法,分享给大家供大家参考.具体方法如下: 实现该功能的关键在于解析资源信息,找到icon的数据,然后计算这些数据的crc 具体实现代码如下: def _get_iconcrc(self, file_path): """ Generates the crc32 hash of the icon of the file. @return: str, the str value of the file's icon "

Java计算文本MD5加密值的方法示例

本文实例讲述了Java计算文本MD5加密值的方法.分享给大家供大家参考,具体如下: java计算文本MD5值,用于加密 import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class GetMd5 { public static void main(String[] args) { String a="123"; System.out.println(getM

在python 不同时区之间的差值与转换方法

之前有个程序,里面有个时间部分是按照国内时区,也就是东八区,来写的,程序中定义了北京时间2点到八点进行检查:后面程序在国外机器上,例如说韩国,欧美等,执行的时候发现会有时间上的问题,因为获取的是机器的本地时间 因为机器上不好装包,只能通过常用的模块进行改写了 原先的代码如下: #self.invalidStartTime = datetime.time(2,00) #self.invalidEndTime = datetime.time(8,59) 为了计算时区的差值并对以上两行代码的时间进行转

SQL Server中关于基数估计计算预估行数的一些方法探讨

关于SQL Server 2014中的基数估计,官方文档Optimizing Your Query Plans with the SQL Server 2014 Cardinality Estimator里有大量细节介绍,但是全部是英文,估计也没有几个人仔细阅读.那么SQL Server 2014中基数估计的预估行数到底是怎么计算的呢? 有哪一些规律呢?我们下面通过一些例子来初略了解一下,下面测试案例仅供参考,如有不足或肤浅的地方,敬请指教! 下面实验测试的环境主要为SQL Server 201

Mysql 相邻两行记录某列的差值方法

表结构: 数据: 需求: 按照company_id不同分组,然后分别求出相同company_id相邻记录touch_time的差值 SQL: select r1.company_id, r1.touch_time, r2.touch_time, r1.touch_time - r2.touch_time from (select (@rownum := @rownum + 1) as rownum, info.company_id, info.touch_time from sys_touch_

php计算2个日期的差值函数分享

非常简单实用的函数分享给大家, 奉上代码: 复制代码 代码如下: /**      *    日期-计算2个日期的差值      *  @return int      */     public function get_difference($date, $new_date) {         $date = strtotime($date);         $new_date = strtotime($new_date);         return abs(ceil(($date

C#计算字符串哈希值(MD5、SHA)的方法小结

本文实例讲述了C#计算字符串哈希值(MD5.SHA)的方法.分享给大家供大家参考.具体如下: 一.关于本文 本文中是一个类库,包括下面几个函数: ① 计算32位MD5码(大小写):Hash_MD5_32 ② 计算16位MD5码(大小写):Hash_MD5_16 ③ 计算32位2重MD5码(大小写):Hash_2_MD5_32 ④ 计算16位2重MD5码(大小写):Hash_2_MD5_16 ⑤ 计算SHA-1码(大小写):Hash_SHA_1 ⑥ 计算SHA-256码(大小写):Hash_SHA

Python简单计算文件MD5值的方法示例

本文实例讲述了Python简单计算文件MD5值的方法.分享给大家供大家参考,具体如下: 一 代码 import sys import hashlib import os.path filename = sys.argv[1] if os.path.isfile(filename): fp=open(filename,'rb') contents=fp.read() fp.close() print(hashlib.md5(contents).hexdigest()) else: print('f

Vue中的循环及修改差值表达式的方法

一.Vue中的循环 v-for 常见的4总情况 #第一种 <div v-for="item in items"></div> #第二种 <div v-for="(item, index) in items"></div> #第三种 <div v-for="(val, key) in object"></div> #第四种 <div v-for="(val, n