为啥MySQL版本不一致,查询结果也不一致,咋办?

背景是这样的:

本地 tomcat 服务连接的是测试环境的数据库,使用 Mybatis 查询。

本地 MySQL 服务版本:MySQL8
本地 MySQL 驱动版本:8.0.11
测试环境 MySQL 服务版本:MySQL5

控制台打印执行sql:
2018-06-15 10:28:21,010 DEBUG [mobile.activity.dao.MobileUserWinprizeRecordDao.findList] - ==>  Preparing: SELECT uwr.id, uwr.user_id userId, uwr.activity_id activityId, uwr.prize_id prizeId, uwr.level, uwr.round, uwr.create_time createTime, uwr.read_flag readFlag FROM activity_user_winprize_record uwr WHERE 1=1 and uwr.activity_id = ? and DATE_FORMAT(uwr.create_time,'%Y-%m-%d') = DATE_FORMAT(?,'%Y-%m-%d') 
2018-06-15 10:28:21,034 DEBUG [mobile.activity.dao.MobileUserWinprizeRecordDao.findList] - ==> Parameters: 1(String), 2018-06-15 10:28:20.929(Timestamp)
2018-06-15 10:28:21,066 DEBUG [mobile.activity.dao.MobileUserWinprizeRecordDao.findList] - <==      Total: 0

上面执行完显示无记录,但拷贝到测试环境的数据库去执行这条sql,结果显示有 19 条记录,具体如下:

SQL语句:
SELECT
uwr.id,
uwr.user_id userId,
uwr.activity_id activityId,
uwr.prize_id prizeId,
uwr. LEVEL,
uwr.round,
uwr.create_time createTime,
uwr.read_flag readFlag
FROM
activity_user_winprize_record uwr
WHERE
1 = 1
AND uwr.activity_id = '1'
AND DATE_FORMAT(uwr.create_time, '%Y-%m-%d') = DATE_FORMAT('2018-06-15 10:28:20.929', '%Y-%m-%d');

怀疑是驱动版本的问题,于是将数据库连接改为本地数据库,代码执行结果就与数据库中一致了,虽然lrc歌词问题解决了,也知道是 MySQL 服务于驱动版本不一致 导致的,但是驱动不是向下兼容的吗?个人怀疑是 timestamp 类型的参数传给 datetime 类型的字段在不同的版本里有不同的处理,网上也 查不到相关的信息,望各位大神指点一二,谢谢!

时区指定了吗

建议把时间那个参数按格式转成String类型试下。

连本地数据库指定时区了,因为当时装本地mysql服务的时候,代码连接本地数据库时报时区的错就指定时区了,但是连测试数据库没问题就没有指定。
神奇的是,刚刚试了一把,什么也没改又可以了!!我突然想起来上次出现这个情况的时候也是上午不行下午测又好了,当时没在意,以为是编译或者缓存的原因。这是为什么???

转换成String类型肯定是可以的,只是不明白为什么 Timestamp 这种类型在不同版本里就不行??

早上的时候加上时区试过了,是可以的,这是为什么呢?

巧了  我也是本地是mysql8,服务器是5.5,我碰到了在跟本地sql语句执行没问题,到服务器就报错。。。。求解答

发布了79 篇原创文章 · 获赞 2 · 访问量 2259

猜你喜欢

转载自blog.csdn.net/liuji0517/article/details/104813801