mongodb和SQL Server在保存时间类型的数据时精准性问题

281 阅读1分钟

一、问题描述

在同时使用mongodb和SQL Server保存一条含有Date类型的字段数据时,在mongodb中时间减少了8小时,SQL Server保存为当前时区时间

远程传入数据

5_0XZQWM7QP1LWH075U~}5K.png

实体类属性

image.png

mongodb实际存储时间

image.png

SQL Server实际存储时间

image.png

二、原因分析

写一个测试类分别查询两个数据库

@Autowired
MongoTemplate mongoTemplate;
@Autowired
@Qualifier("sqlserverprimaryJdbcTemplate")
JdbcTemplate JdbcTemplate;
@Test
void test() {
   System.out.println(mongoTemplate.findOne(new Query(Criteria.where("_id").is("62009570402fa80f88fb260e")), ImportOrder.class));

   String sql="SELECT fcTime AS arrivaDate FROM DeliveryTempRecord WHERE DeliveryTempRecordOID ='B6FB07F9-FB50-4528-8BC1-978F05CACF4F'";

   System.out.println(JdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(ImportOrder.class)));
}

结果显示,虽然数据库保存的时间不同,但是因为属性上加了时区,实际取值并不会受到影响

image.png

三、结论

查看mongodb的官方文档,发现其保存的时间类型为UTC

image.png

SQL Server的官方文档则显示,其时间数据类型是提供时区支持的

image.png

这里了解一下GMT,UTC相关的概念

image.png

因此,在查看数据库时注意mongodb和SQL Server的区别就行,对前后端交互数据的精准性不造成影响。