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个能实现的时候在多写个吧,不麻烦吗,哈哈哈)
好了,结束(),真是个让人抓狂,让人恶心的问题(
)