有时候前端传过来的日期(年/月/日)在后端能正常获取到,但是后端插入数据库后竟然日期相差了整整一天,这是为什么呢?
1.原因可能是数据库配置里面时区写错了(如下面的:serverTimezone=UTC)
spring.datasource.url=jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
2.解决方法:
把上面的serverTimezone=UTC改成serverTimezone=Asia/Shanghai,你就会神奇的发现数据库中插入的日期跟前端穿过来的一样了
原因描述:
UTC,简称世界统一时间,跟北京时间相比,比北京早8个小时。也就是说,我后台传入的数据是2021-09-10 00:00:00,进入数据库就会少八个小时,变成2021-09-0916:00:00,这就说得通为什么插入时间少了一天了。
更专业一点的解释:如果你用编译器连接数据库,定义了serverTimezone=UTC,那么在你编译器上执行的SQL语句,会先以UTC时区进行存储,发送到MySQL,然后MySQL以本地时区进行转换,就会导致,执行时间比从编译器上的执行时间早8个小时,导致,同一段SQL语句,在mysql直接执行,与编译器执行,结果不同,因为时间相差8个小时