前言
记录Java保存Date类型字段到Mysql时毫秒数精度丢失问题。
问题描述
基于Java的项目中,保存Date类型字段到Mysql数据库时,毫秒数的精度丢失,保存的.000
,没有保存具体的毫秒数。
原因分析
网上查了相关资料并测试发现,是项目中 mysql-connector-java
包的版本问题,小于等于 5.1.22
版本的在保存的时候会按 yyyy-MM-dd HH:mm:ss
再格式化一次,从而导致丢失毫秒数。
以下是 5.1.21
版本部分源码截图:
感兴趣的可以自己翻看源码看看,com.mysql.jdbc.PreparedStatement
类下的 private void setTimestampInternal(...)
方法
解决方法
将 mysql-connector-java 包的版本升级的 5.1.22
以上即可。
(PS:mysql 表中对应的时间字段类型为 Timestamp
且长度设置为 3
。)