背景
java使用mybatis框架,更新一个datetime数据类型的值,插入后查询获取该字段并转成时间戳,发现插入前的时间戳和取出后的时间戳不一致。
原因
更新后数据库里该字段的时间戳跟程序中的时间戳相比,后面三位数都是0,说明是数据入库时被截断了。后面三位数刚好是毫秒数,可以判断出是datetime数据入库时,毫秒数未被保存。通过查资料和核对表设计,发现该datetime列的长度为0,即保存0位毫秒数。
解决办法
如果需要保持入库时程序中的时间和数据库里的时间精度一致,有以下两种方案:
- 可以通过修改该字段的长度为3,使数据库保存datetime值时保存的精度精确至3位毫秒数。
- 程序中处理,更新数据库前,把待更新时间的毫秒数去除(即精确到秒),再更新改时间值