
java web 项目,用的 springboot 构建的,数据库是 mysql 写了个 select 语句,控制台输出的 sql 如下 select id, duty_type, date, tips from schedule s where s.date BETWEEN ? AND ? 2019-04-30 10:43:17.226 DEBUG 3148 --- [nio-7777-exec-9] c.i.i.dao.ScheduleMapper.selectByDate : ==> Parameters: 2019-02-13(Date), 2019-04-23(Date)
然后在 navicat 中输入查询的 sql 如下 select id, duty_type, date, tips from schedule s where s.date BETWEEN '2019-04-10' AND '2019-04-23' ;
在我看来是一模一样的,但是实际上通过 mybatis 查到的结果相当于直接查询 between '2019-04-10' AND '2019-04-22' 也就是说要少了一天 数据库中 date 的数据类型也是 date,这个问题很让我困惑,不知道有没有大佬告知一下。
1 Citrus 2019 年 4 月 30 日 via iPhone 1 是你打错了,还是你没看清。。。日期完全不一样啊。。。 |
2 kidtest 2019 年 4 月 30 日 mybatis 查询好像确实有这个问题,https://www.cnblogs.com/EasonJim/p/7513743.html |
3 guodastanson OP @Citrus 没打错,日期我看 mybatis 跟 navicat 一模一样,但是结果就是会差一天的数据 |
4 guodastanson OP @kidtest 先谢后看,谢谢 |
5 guodastanson OP @kidtest 已经解决,手动给他调成 23:59:59 了 |
6 TommyLemon 2019 年 4 月 30 日 检查配置,charset,timezone 等 |
7 w292614191 2019 年 4 月 30 日 and date <= '2019-05-30' and date >='2019-04-30'。 between : and date< '2019-05-30' and date > '2019-04-30'。 一个包含?一个包含? 我也不知道,瞎猜的。 |
8 walkman660 2019 年 4 月 30 日 管那么多干嘛,以服务器上 mysql 命令行查出来的为准肯定没问题 哪个客户端和 mysql 命令行查出来的不一样,哪个客户端就是有问题 |
9 ETiV 2019 年 4 月 30 日 via iPhone 找个数据库开 general log,看收到的是啥 不写 Java,但看到了( Date ),盲猜是帮你转了和数据库不一致的时区的时间 |
10 guodastanson OP @ETiV 不是时区问题,上面有朋友给出答案了,确实是 mybatis 的锅 |
11 guodastanson OP @w292614191 between 就是包含,锅还是在 mybatis |
12 guodastanson OP @TommyLemon utf-8,东八区这都没问题 |
13 fmumu 2019 年 4 月 30 日 via Android mybatis 里参数类型用的 Date,navicat 用的字符串,肯定不一样啊 |
14 hhhzccc 2019 年 4 月 30 日 比如:2019-04-23 17:20:00 不在你那个 between and 里面。oracle,mysql 要注意这个问题。不想精确到分秒可以:date '2019-04-23' +1 或者:date '2019-04-23 23:59:59'。 |
15 silentstorm 2019 年 4 月 30 日 因为没有写时间,所以都是按照 00:00:00 来计算的,区间的右端肯定不包含当天了。 |
16 MajorAdam 2019 年 4 月 30 日 这个不是 bug 啊 |