MySQL中如何替换包含反斜杠的字符串?
搞定MySQL含反斜杠的href字符串替换问题
嘿,我之前也踩过这个转义的坑,太懂你这种明明语句逻辑对,但就是匹配不到内容的郁闷了!咱们来一步步解决它:
为啥你的原语句失效?
MySQL里反斜杠(\)是默认的转义字符,这就导致你写在SQL里的href=\\"example.com\\",会被MySQL先解析成href="example.com"——反斜杠直接被吃掉了!自然匹配不到那些存储时带反斜杠的内容。
正确的替换姿势
你需要对反斜杠做双重转义:用\\\\来表示存储内容里的单个\。这样SQL解析时,\\\\会先转换成\\,REPLACE函数就能准确匹配到目标字符串里的反斜杠了。
试试这条语句:
UPDATE `articles` SET `text` = REPLACE(`text`, 'href=\\\\\"example.com\\\\\"', 'href=\\\\\"https://example.com\\\\\"') WHERE `text` LIKE '%href=\\\\\"example.com\\\\\"%';
如果你用的是MySQL 8.0.17及以上版本,还有更省心的写法——用raw字符串字面量(前缀加r),这样不用手动折腾双重转义,直接写原始格式就行:
UPDATE `articles` SET `text` = REPLACE(`text`, r'href=\"example.com\"', r'href=\"https://example.com\"') WHERE `text` LIKE r'%href=\"example.com\"%';
先验证再修改,避免踩坑
在执行UPDATE之前,建议先跑个查询确认能匹配到目标记录,免得误操作:
-- 普通版本 SELECT `text` FROM `articles` WHERE `text` LIKE '%href=\\\\\"example.com\\\\\"%'; -- 或者raw字符串版本 SELECT `text` FROM `articles` WHERE `text` LIKE r'%href=\"example.com\"%';
确认能查到要修改的记录后,再执行UPDATE更稳妥。
额外小提醒
执行更新前最好备份一下表数据,或者用事务包裹操作,万一结果不对还能回滚:
START TRANSACTION; -- 执行你的UPDATE语句 SELECT `text` FROM `articles` WHERE `text` LIKE '%href=\\\\\"example.com\\\\\"%'; -- 检查修改结果 -- 没问题就提交:COMMIT; 不对就回滚:ROLLBACK;
内容的提问来源于stack exchange,提问作者Yuri
相关产品推荐
相关产品推荐

