一、问题描述
在同时使用mongodb和SQL Server保存一条含有Date类型的字段数据时,在mongodb中时间减少了8小时,SQL Server保存为当前时区时间
远程传入数据
实体类属性
mongodb实际存储时间
SQL Server实际存储时间
二、原因分析
写一个测试类分别查询两个数据库
@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)));
}
结果显示,虽然数据库保存的时间不同,但是因为属性上加了时区,实际取值并不会受到影响
三、结论
查看mongodb的官方文档,发现其保存的时间类型为UTC
SQL Server的官方文档则显示,其时间数据类型是提供时区支持的
这里了解一下GMT,UTC相关的概念
因此,在查看数据库时注意mongodb和SQL Server的区别就行,对前后端交互数据的精准性不造成影响。