MySQL datetime 时间字段的四舍五入
程序员小航
共 793字,需浏览 2分钟
· 2021-09-30
前言
如果不是踩到坑,我估计到现在还不知道时间字段会四舍五入。
1
背景
通过 Java 代码获取当日最大时间,然后存入数据库,数据库表字段格式 datetime 保留 0 位。
now.with(LocalTime.MAX)
小小的一行代码,获取今天的最大日期。
到数据库一看,好家伙,竟然存了第二天的时间。
![](https://filescdn.proginn.com/a26963d9470799321071909e83546fd4/f926fd1f6f67cd592adf823ca8dc3367.webp)
看着样子是四舍五入了!
2
模拟测试
![](https://filescdn.proginn.com/9647a6cc03cc4e587dbffd5a67b3970d/256177d3b1c7ffe34c9557d98f758ea0.webp)
![](https://filescdn.proginn.com/ec89edd055071fe25dd6128ca906ceec/32a2b81d525d5fa7439c903cd1cbc4fc.webp)
执行之后,看一下日志:
![](https://filescdn.proginn.com/7d4c07ffaee6a4726c775adabcc8b4e7/a82e019b8b6bc1fd61c5c5a390ac2a33.webp)
使用的是 2021-09-28T23:59:59.999999999
,但是很奇怪的是数据库存储的是 2021-09-29 00:00:00
。
直接使用 SQL 试一试:
![](https://filescdn.proginn.com/9d0287a1cf9a57d845e30a5bd9e4727b/54786a8676749308aac314a910c9836f.webp)
这…… 果然是四舍五入了。
换成 MariaDB 试试!
docker pull mariadb
docker run -d --name mariadb -p 33306:33306 -e "MYSQL_ROOT_PASSWORD=root" mariadb
docker exec -it mariadb bash
![](https://filescdn.proginn.com/575c9ad5c15be04b616c75ebf7eb3fba/ac6cd992971e1d579d6c5b7824c82a18.webp)
MariaDB 是直接舍弃多余位数的!
3
结论
MySQL 时间如果传入的值超过精度范围,会进行四舍五入。
MariaDB 时间如果传入的值超过精度范围,会直接舍弃。
踩了个小坑。最后还是硬编码吧!
now.with(LocalTime.parse("23:59:59"))
- <End /> -
历史文章 | 相关推荐
评论
武安镇洪山寺村
一、地理位置武安镇洪山寺村位于襄阳市西南区域,地处武董公路沿线。二、人口土地状况全村现有4个村民小组,398户,1464人,耕地面积2413.43亩,其中水田2098亩,旱地316亩。三、集体经济状况
武安镇洪山寺村
0
龙井乡
地名由来:沿街有水井两口,似龙眼,久旱不涸,似龙吞贾河之水状,故名。龙井乡位于信阳市平桥区东北部,距市区30公里,东与肖王乡为邻,南与洋河乡接壤,西与胡店乡交界,北与肖店乡隔淮河相毗邻。全乡南北长15
龙井乡
0
洪山殿镇太平寺村
2021年11月,太平寺村被确定为2021年湖南省乡村振兴示范创建村。太平寺村是湖南省娄底市双峰县洪山殿镇下辖的行政村,城乡分类代码为220,为村庄。区划代码为431321107245,居民身份证号码
洪山殿镇太平寺村
0
龙井乡沿淮村
沿淮村是河南省信阳市平桥区龙井乡下辖的行政村,城乡分类代码为220,为村庄。区划代码为411503202205,居民身份证号码前6位为411503。邮政编码为464000,长途电话区号为0376,车
龙井乡沿淮村
0