说在我的 wordpress 数据库中,我有一个包含如下字符串的 post_content 列:
href=\"http:\/\/dev.example.com\/example\/wp-content\/uploads\/2019\/07\/my.pdf\"
以上是字符串的一部分(放置在文本内的链接中),它来自使用 json 作为数据格式的插件 (acf) 保存的数据。
然后我跑
UPDATE wp_posts SET post_content = REPLACE(post_content,'http:\/\/dev.example.com\/example\/', 'https:\/\/www.example.com\/');
好吧,那是行不通的。零行受影响并且没有错误。为什么?我究竟做错了什么?
这种代码来自 wordpress 中的 acf plugin gutenberg 块,那是因为它是 json 编码的。但据我所知,应该像对待任何其他字符串一样对待.. 怎么了?
更准确地说,我在下面附上了一张来自 sequelpro 和 cli 的图片,以证明反斜杠的存在(见评论)。
作为入门,看起来数据是使用转义字符
\
反斜杠存储的,以允许 WordPress 服务器自动使用引擎本身中的数据。您必须将反斜杠加倍才能查找和替换字符串。
您可以通过 dbfiddle.uk 验证这一点。
如果您对 MySQL 8.0 实例运行搜索字符串,如下所示:
...然后你会收到这个:
参考:问题 255169 的db<>fiddle (db<>fiddle)
这不是存储在数据库中的内容,因此不会被发现。
解决方案
解决方案是将(MySQL)转义字符加倍
\
为:...返回这个:
参考:问题 255169 的db<>fiddle (db<>fiddle)
该命令在语法上是正确的..因此没有错误。
0 行受影响 - 显然您要替换的字符串数据不存在(至少不是您的命令所期望的方式)正如@Akina 建议的那样,分析数据。根据目标环境(将数据用于 html 链接的程序),很可能稍后会完成转义 - 数据库不必担心 html 特定的语法规则