数据库: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‘;
结果:
查询语句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‘
结果:
对settlement_begin_time 添加了索引,查询语句的区别: 一个有".0"一个没有“.0”
删掉索引后有".0"的也能正常查询。
经调查,这是MySQL的一个bug,在后续版本中已经修复,本人使用mysql5.5进行测试一切正常。
出现此问题时的解决方案:
1. 升级MySQL版本,最有效
2. 曲线救国,Java代码中,预先将Timestamp类型的数据进行格式化,然后以字符串的方式放入查询语句,因为mysql-jdbc调用的 “PreparedStatement” 的setTimestamp方法会加上".0"
时间: 2024-10-27 17:27:41