mybatis-plus将date类型转为timestamp的问题

前言

最近项目上开发时遇到了一个问题,数据库中是datetime类型,实体类中是Date类型,我将该字段设置为例如’2023-08-01 23:59:59.999’时,实际存到数据库中时发现是’2023-08-02’了,下面记录下

问题

一开始看到,我以为我代码里设置错了,但是一通查看后,发现我代码里设置的确实是23:59:59。使用mybatis-plus时,框架会打印sql,我发现sql里是这样的end_time = TIMESTAMP '2023-08-14 23:59:59.999',,转成了TIMESTAMP 类型设置的。

TIMESTAMP 类型的精度通常只能到秒级别,而不是毫秒级别。因此,当插入一个带有毫秒级别的时间戳时,数据库会将毫秒部分舍去,保留到秒级别。看起来就是它进位了

解决

两种方式,一是使用LocalDateTime、二就是将毫秒部分直接舍去,比如end_time = TIMESTAMP '2023-08-14 23:59:59',,这样就没问题了