使用 JDBC 版本为 5.1.46,mysql 的版本 5.6.16,从客户端查询出数据为
使用 JDBC 拿到数据是
为什么当末尾是 000 时,查询出来的结果精度只有一位???
本地 debug 时,查看返回的时间戳也是正常的
mysql-connector-java 版本升级出现的一次问题。涉及到了时间精度的截取和四舍五入。
首先了解一点,timestamp,datetime 如果不指定精度,默认的精度是秒。
当 mysql-connector-java 版本<=5.1.22 时,db 的客户端会将 Datetime,Timestamp 秒以下的精度丢弃。版本>5.1.22 后,秒以下的值将不会截断
是不是类似这样的?
不是,如果时间精度值不是 000,返回是正常的。比如:数据库中 2023-10-18 17:06:19.247,返回也是 2023-10-18 17:06:19.247。,如果数据库中是 2023-10-18 17:06:19.000,返回结果就是 2023-10-18 17:06:19.0,精度丢失两位。
看了源码,大概找到问题了, 在取精度的时候。使用的函数时 getInt,
当精度是 000 时,取出是 0