亚洲步兵一区二区三区-日韩精品伦理在线一区-亚洲色诱视频免费观看-久久人妻视频免费观看

廣州總部電話:020-85564311
20年
互聯(lián)網(wǎng)應(yīng)用服務(wù)商
廣州總部電話:020-85564311
20年
互聯(lián)網(wǎng)應(yīng)用服務(wù)商
請(qǐng)輸入搜索關(guān)鍵詞
知識(shí)庫(kù) 知識(shí)庫(kù)

優(yōu)網(wǎng)知識(shí)庫(kù)

探索行業(yè)前沿,共享知識(shí)寶庫(kù)

MySQL中模糊匹配like的一個(gè)坑

發(fā)布日期:2025-08-21 17:50:53 瀏覽次數(shù): 812 來(lái)源:舒一笑的架構(gòu)筆記
推薦語(yǔ)
MySQL模糊匹配的隱藏陷阱:兩個(gè)看似相同的SQL查詢?yōu)楹谓Y(jié)果大不同?

核心內(nèi)容:
1. 兩個(gè)高度相似的SQL查詢語(yǔ)句對(duì)比分析
2. LIKE模糊匹配在特定場(chǎng)景下的異常行為解析
3. 避免此類(lèi)問(wèn)題的實(shí)用解決方案
小優(yōu) 網(wǎng)站建設(shè)顧問(wèn)
專業(yè)來(lái)源于二十年的積累,用心讓我們做到更好!

 

最开始展示一下两个极其类似的SQL查询语句

SELECT *
 FROM saas_knowledge_container kc
 WHERE kc.tenant_id = '1953660902800752640'
 AND type <> 'PERSONAL_KNOWLEDGE'
 AND (kc.visibility_range = 'ENTERPRISE_PUBLIC'
 OR (kc.visibility_range = 'MEMBERS_ONLY'
 AND EXISTS (SELECT 1
 FROM saas_knowledge_container_permission p
 LEFT JOIN kb_department d
 ON d.code = p.membership_code
 WHERE p.container_id = kc.code
 AND p.tenant_id = kc.tenant_id
 AND ((p.membership_type = 'USER'
 AND p.membership_code = '1958104631190691840')
 OR (p.membership_type = 'ORGANIZATION'
 AND ((d.full_path LIKE concat('%''1958103924488216576,1958103969639899136,1958104007833231360''%'))))))));
 select *
 FROM saas_knowledge_container kc
 WHERE kc.tenant_id = '1953660902800752640'
 AND type <> 'PERSONAL_KNOWLEDGE'
 AND ( kc.visibility_range = 'ENTERPRISE_PUBLIC'
 OR ( kc.visibility_range = 'MEMBERS_ONLY'
 AND exists (
 SELECT 1
 FROM saas_knowledge_container_permission p
 LEFT JOIN kb_department d
 ON d.code = p.membership_code
 WHERE p.container_id = kc.code
 AND p.tenant_id = kc.tenant_id
 AND ( (p.membership_type = 'USER'
 AND p.membership_code = '1958104631190691840')
 OR ( p.membership_type = 'ORGANIZATION'
 AND ( ( d.full_path like concat('%''1958103924488216576''%')
 OR d.full_path like concat('%''1958103969639899136''%')
 OR d.full_path like concat('%''1958104007833231360''%') ) ) ) ) ) ) ) order by kc.create_time desc

上述两个SQL,除了最后的full_path路径匹配规则不一样,其余都相同。上述两个SQL的效果是SQL1查询不出数据📊,SQL2可以查询出对于的数据。一开始看对着SQL的寓意进行分析没有发现明显的问题。。。。

为什么会出现数据一个有一个无,需要了解一下mysql中的like用法。

  • • 第一条语句把 3 个组织 ID 用逗号串成一个整体去 LIKE:
    LIKE concat('%', '1958103924488216576,1958103969639899136,1958104007833231360', '%')
    等价于
    LIKE '%1958103924488216576,1958103969639899136,1958104007833231360%'
  • • 第二条语句把 3 个 ID 拆开,各自独立 LIKE:
    ... LIKE '%1958103924488216576%' OR ... LIKE '%1958103969639899136%' OR ... LIKE '%1958104007833231360%'

    还是问问AI给我分析一下是为什么,我迷茫了

所以按照上述AI提供的排查思路,我开始对数据进行分析,查询当前记录是否真的存在特殊字符

SELECT hex(full_path)
FROM kb_department
WHERE code = '1958104007833231360';

如果看到 20(空格)、0A(换行)、EF BB BF(BOM)、E2808B(零宽空格)等,就说明肉眼看不见的东西混进去了。
解决:UPDATE 去掉这些字符,或把 LIKE 模式前后各加一个 %

但是期待的结果并没有出现

于是后续继续按照别的思路进行排查,是不是visibility_range没有命中,还是COUNT(*) > 0 但带 LIMIT 36 的语句不返回 → 就是 ORDER BY kc.create_time DESC 把这条记录挤到 36 行之外。结果尝试之后都不是。。。。

问题解决

思考了半天,终于在最后想到了原因。话不多说,继续来看两个SQL。

select * from kb_department where code = '1958104007833231360';
select * from kb_department where code = '1958103924488216576';

看到这里应该也发现原因,用户所在的部门编码是1958103924488216576,对应的全路径是1958103924488216576。使用like进行全匹配的规则不服务第一个查询不出的sql中全路径匹配规则,所以需要在路径获取到之后,其中之一也是比较好的解决方案的方式,可以通过代码进行一个字符串逗号分隔~,使用这种能避免一个字符集等问题,要是mysql中有Java一样的contains语法就好了!

// 在调用Mapper之前,先处理字符串分割
List<String> processedOrgCodes = new ArrayList<>();
for (String orgCode : orgPermissions.getOrganizationCodes()) {
    if (orgCode != null && orgCode.contains(",")) {
        // 分割逗号分隔的字符串
        String[] codes = orgCode.split(",");
        for (String c : codes) {
            if (c != null && !c.trim().isEmpty()) {
                processedOrgCodes.add(c.trim());
            }
        }
    } else if (orgCode != null && !orgCode.trim().isEmpty()) {
        processedOrgCodes.add(orgCode.trim());
    }
}

 


優(yōu)網(wǎng)科技,優(yōu)秀企業(yè)首選的互聯(lián)網(wǎng)供應(yīng)服務(wù)商

優(yōu)網(wǎng)科技秉承"專業(yè)團(tuán)隊(duì)、品質(zhì)服務(wù)" 的經(jīng)營(yíng)理念,誠(chéng)信務(wù)實(shí)的服務(wù)了近萬(wàn)家客戶,成為眾多世界500強(qiáng)、集團(tuán)和上市公司的長(zhǎng)期合作伙伴!

優(yōu)網(wǎng)科技成立于2001年,擅長(zhǎng)網(wǎng)站建設(shè)、網(wǎng)站與各類(lèi)業(yè)務(wù)系統(tǒng)深度整合,致力于提供完善的企業(yè)互聯(lián)網(wǎng)解決方案。優(yōu)網(wǎng)科技提供PC端網(wǎng)站建設(shè)(品牌展示型、官方門(mén)戶型、營(yíng)銷(xiāo)商務(wù)型、電子商務(wù)型、信息門(mén)戶型、微信小程序定制開(kāi)發(fā)、移動(dòng)端應(yīng)用(手機(jī)站APP開(kāi)發(fā))、微信定制開(kāi)發(fā)(微信官網(wǎng)、微信商城、企業(yè)微信)等一系列互聯(lián)網(wǎng)應(yīng)用服務(wù)。


我要投稿

姓名

文章鏈接

提交即表示你已閱讀并同意《個(gè)人信息保護(hù)聲明》

專屬顧問(wèn) 專屬顧問(wèn)
掃碼咨詢您的優(yōu)網(wǎng)專屬顧問(wèn)!
專屬顧問(wèn)
馬上咨詢
聯(lián)系專屬顧問(wèn)
聯(lián)系專屬顧問(wèn)
聯(lián)系專屬顧問(wèn)
掃一掃馬上咨詢
掃一掃馬上咨詢

掃一掃馬上咨詢

和我們?cè)诰€交談!
主站蜘蛛池模板: 一本色道久久综合中文字幕| 欧美性动态一区二区三区| 国产丝袜美腿视频黄片| 人妻激情视频一区二区三区免费| 中文字幕久久麻豆人妻| 欧美激情一区二区三区在线| 国产精品一区二区成人| 日韩精品中文字幕巨臀人妻中出| 欧美日韩国产精品自在自现| 久久国产精品亚洲精品| 日韩精品av在线免费看| 久久人妻熟女一区二区视频| 亚洲精选午夜福利小视频在线观看| 一本色道久久综合中文字幕| 一级av一区二区三区| 一级a性生活片久久无| 亚洲一区二区三区网站| 亚洲av免费在线不卡| 欧美精品一区二区三区精品久久| 人妻熟妇乱又乱精品视频| 人妻少妇内射一区二区| 日韩有码国产中文字幕| 午夜视频精品欧美亚洲| 午夜亚洲av高潮在线观看| 日韩精品成人av网站| 欧美日韩免费精彩大片| 亚洲情色人妻中文字幕一二区| 亚洲欧洲日韩国产精品视频| 在线视频你懂的色日韩| 久久人妻精品一二三区| 欧美一区二区三区色噜| 91黄色在线观看网站| 成年片色大黄全免费网站久久| 成年人深夜福利在线观看| 久草福利资源在线观看视频| 日本黄色激情视频看看| 国产日韩欧美在线观看一区播放视频| 亚洲激情视频一区二区三区| 国产午夜免费在线播放视频| 有码av高清在线中文字幕| 精品人妻少妇一区二区三区水蜜桃|