pg数据库适配问题:timestamp without time zone <= character varying

pg数据库适配问题

场景:多数据库适配,在mysql数据库中执行没有问题的sql,在适配Postgresql时查询报错

详细描述:mapper中sql出错位置report_date between #{startDate} and #{endDate},dao中入参类型为LocalDateTime,mysql中字段类型为datetime

报错信息

操作符不存在: timestamp without time zone <= character varying
Hint: 没有匹配指定名称和参数类型的操作符. 您也许需要增加明确的类型转换

解决方案

采用的第一个方案是将dao中的入参类型改为Timestamp,能解决Postgresql问题,但在mysql数据库中查不到数据,因为mysql的Timestampdatetime类型不对应。于是换种方案将dao中的入参类型改为LocalDate,可兼容mysql和Postgresql。

ps:values(#{startDate,jdbcType=DATE})可将Java类型转为mysql类型,但未经实践检验。

分析:Postgresql数据库不能对字符串类型进行大于小于等比较操作,当时间类型数据格式不符合规范时,sql中的between、gt、lt等操作会报错。Postgresql的时间类型格式为2023-01-01 10:00:00+08(带时区)2023-01-01 10:00:00(不带时区)。java中用LocalDateTime取的时间格式是2023-01-01T00:00

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值