mysql时间戳组合索引_MySQL TIMESTAMP 类型加索引时出现的bug

数据库:MySQL,版本:5.1.45

查询语句1:

select id, settlement_begin_time , settlement_end_time  from mkt_vendor_settlement_brief where settlement_begin_time >= '2017-09-01 00:00:00.0' and settlement_end_time <=  '2017-09-30 23:59:59.0';

结果:

3eb7a9988fce5b357908af6ef59638c4.png

查询语句2:

select id, settlement_begin_time , settlement_end_time  from mkt_vendor_settlement_brief where settlement_begin_time >= '2017-09-01 00:00:00' and settlement_end_time <=  '2017-09-30 23:59:59.0'

结果:

aa5876b1cf600d801188e2a6f0066358.png

对settlement_begin_time 添加了索引,查询语句的区别: 一个有".0"一个没有“.0”

删掉索引后有".0"的也能正常查询。

经调查,这是MySQL的一个bug,在后续版本中已经修复,本人使用mysql5.5进行测试一切正常。

出现此问题时的解决方案:

1.  升级MySQL版本,最有效

2. 曲线救国,Java代码中,预先将Timestamp类型的数据进行格式化,然后以字符串的方式放入查询语句,因为mysql-jdbc调用的  “PreparedStatement” 的setTimestamp方法会加上".0"

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值