mysql数据中存在\导致where条件=和like出现问题

先说下结果吧,在where条件里面,column='\'的里面\要换成\\,column like'%\%'里面\要换成\\\\(最少4个\)。

遇到个让人抓狂的mysql数据库问题,此时心情()。因为种种原因吧,各位自行脑补,mysql数据库某表某列出现了存储绝对路径的数据,一起看下吧

select id,fid,uuid,ruleid,ptmc,path,cjsj
from pgrecord;

 

看到了没path列的数据有“\”,正常情况下path列应该存储相对路径“/publish-v2/eval/Eval0403/local_upload_match/13P2/13029499/13029499.hex”,结果现在存储的是“E:\publish-v2\eval\Eval0403\/local_upload_match/13P2\13029499\13029499.hex”,不仅有/还有\,而且存储的是绝对路径,整个一无语(

如果where条件里面没有path列就没有这个问题,如果有,没那么问题来了

 

select id,fid,uuid,ruleid,ptmc,path,cjsj
from pgrecord
where path='E:\publish-v2\eval\Eval0403\/local_upload_match/13P2\13029499\13029499.hex';

注:path='E:\publish-v2\eval\Eval0403\/local_upload_match/13P2\13029499\13029499.hex';对应了上图id=101803的那条数据的path

我去,没查到数据,真**奇怪,见鬼了()什么玩意

 

经过多方查找发现了mysql对于条件中的\有特殊意义,需要进行转义,也就是出现\的地方用\\(两个反斜杠)

select id,fid,uuid,ruleid,ptmc,path,cjsj
from pgrecord
where path='E:\\publish-v2\\eval\\Eval0403\\/local_upload_match/13P2\\13029499\\13029499.hex';

path=查到数据了

 

有了上面\换为\\然后试path like

select id,fid,uuid,ruleid,ptmc,path,cjsj
from pgrecord
where path like'%/local_upload_match/13P2\\13029499\\13029499.hex%';

 

我靠,服了()怎么没数据,已经把\换成\\了啊,怎么还有问题()。经过各种尝试和各种百度发现like里面的\变成\\是不行的,得用\\\\,就是\换成\\\\(换成4个及以上\才可以)

select id,fid,uuid,ruleid,ptmc,path,cjsj
from pgrecord
where path like'%/local_upload_match/13P2\\\\13029499\\\\13029499.hex%';

这就有结果了

 

然后测试了,1个是\\\\\(5个)1个是\\\\\\(6个)也是可以的

select id,fid,uuid,ruleid,ptmc,path,cjsj
from pgrecord
where path like'%/local_upload_match/13P2\\\\\13029499\\\\\\13029499.hex%';

 也就是说=的里面\要换成\\,like里面\要换成\\\\(最少4个\,实际应用中没人会在4个能实现的时候在多写个吧,不麻烦吗,哈哈哈

好了,结束(),真是个让人抓狂,让人恶心的问题(

 

如需转载或引用请标明出处!本号发布的包括但不限于学术论文、科研成果、研究资料等,仅供内部学习、学术交流所使用,不得用于任何商业用途或牟利,特此声明!

posted @ 2025-04-07 14:33  黑夜管理员  阅读(341)  评论(1)    收藏  举报