equals()比较字符串和MySQL中=比较结果不一致

文章讨论了在处理普通车辆入园统计时,发现数量和列表数据不一致的问题。通过对比统计方法、equals()比较和SQL查询,特别是探讨了如何在MySQL中使用equals()和COLLATE子句进行不区分大小写的字符串比较来解决此问题。
摘要由CSDN通过智能技术生成

问题:

普通车辆入园统计结果数量和普通车辆统计列表数量不一致?

列子:数量:967,列表:974

解决问题步骤

对比统计数量和统计列表的统计方法

统计数量代码实现

一:查询出车辆滞留表数据List

二:查询出系统登记车辆数据List

三:比较两个List

四:equals()相同车牌号计数统计

列表数据sql实现

关联两个表,条件车牌号相同 =

对比

同:车辆滞留表数据List和登记车辆数据查出数据条数相同;

异:比较车牌号数据不同

统计数量:

//普通车辆数量
int ordinaryVehicleGardenCount = 0;                
//遍历普通车辆数据
for (DspMjzkOrdinaryVehicle car : value) {
    //遍历滞留表数据
    for (DspIccEventCarRetention iccEventCarRetention : iccEventCarRetentions) {
                            //如果普通车辆和滞留表的车牌号对应,那么加1
          if (car.getVehiclesId().equals(iccEventCarRetention.getCarNum())) {
                                ordinaryVehicleGardenCount++;
           }
    }
 }

统计列表:

 SELECT
			b.vehicles_id,
			a.car_num
FROM dsp_icc_event_car_retention a,
		dsp_mjzk_ordinary_vehicle b
  WHERE a.car_num = b.vehicles_id 
 AND a.is_deleted = 0
 AND a.`status` = 1
 AND b.vehicle_use = 1
 AND b.is_deleted = 0
 AND b.`status` = 1
 AND b.create_dept IS NOT NULL
 AND a.car_num IS NOT NULL;

解决问题

查询问题知识

1.对于字符串的 equals 方法:

  • 默认情况下,equals 是区分大小写的,即大写和小写字母被视为不同。
  • 如果你想进行不区分大小写的比较,可以使用 equalsIgnoreCase 方法。

2.在 MySQL 中,字符串的比较默认是不区分大小写的。

SELECT * 
FROM dsp_mjzk_ordinary_vehicle 
WHERE vehicles_id='川fjW790'

 

实现MySQL区分大小写比较方法:

1.使用 BINARY 操作符
-- BINARY 字段 实现二进制的比较 在mybatisplus中xxx.xml会报错
-- BINARY 操作符在 MyBatis Plus 的查询构造器中可能不被支持
SELECT * 
FROM dsp_mjzk_ordinary_vehicle 
WHERE  BINARY vehicles_id ='川FJW790';

 换为'川fjW790'查不出来数据

2.使用 COLLATE 子句

utf8mb4_bin 是指定二进制比较的字符集

-- 字段COLLATE utf8mb4_bin实现进行二进制比较
SELECT * 
FROM dsp_mjzk_ordinary_vehicle 
WHERE  vehicles_id COLLATE utf8mb4_bin='川FJW790' 

换为'川fjW790'查不出来数据

测试

1.测试发现BINARY 操作符在 MyBatis Plus 的查询构造器中可能不被支持

2.最终使用COLLATE 子句

 SELECT
			b.vehicles_id,
			a.car_num
 FROM dsp_icc_event_car_retention a,
		dsp_mjzk_ordinary_vehicle b
 WHERE a.car_num COLLATE utf8mb4_bin = b.vehicles_id COLLATE utf8mb4_bin
 AND a.is_deleted = 0
 AND a.`status` = 1
 AND b.vehicle_use = 1
 AND b.is_deleted = 0
 AND b.`status` = 1
 AND b.create_dept IS NOT NULL
 AND a.car_num IS NOT NULL;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值