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',
,这样就没问题了