如何在数据库中搜索和替换字符串的所有实例?

时间:2009-05-07 17:47:33

标签: mysql database wordpress replace

我有一个字符串,包含在wordpress安装(服务器的名称)内,数千次,包含多个列,记录和表格。

我想用另一台服务器的位置更新它 - 我们正在移动内容。

所以来源就像http://my-server1/some/link/to/something,我想用http://my-other-server/some/link/to/something替换它。我基本上希望为http://my-server1的每个实例重复此过程。

在MySQL中有一种简单的方法吗?一个工具? 或者,我是否遗憾地必须更新每个记录?

谢谢,

7 个答案:

答案 0 :(得分:38)

一种粗略(但有效)的方法是将模式转储到文件中,仔细应用搜索和替换然后重新导入。

事实上我今天就这样做了:)

答案 1 :(得分:17)

在谷歌搜索中遇到过这个问题,但这可能对某些人有所帮助。如果您知道表和列(您可以使用phpMyAdmin中的通配符搜索找到它),

  

更新 table_name SET column_name = REPLACE( column_name ,   '的 http://oldsite.com ', '的 http://newsite.com ');

粗体部分替换为您自己的部分。

如果你有一个大型数据库,你可以将它应用到一个可以遍历每个表和列的脚本中。

答案 2 :(得分:11)

如果您乐意重新导入整个数据库,那么MySQL转储方法将是最好的选择。对于任何不想这样做的人 - WordPress核心安装实际上只包含11个表,其中很少是内容列,因此按列替换也同样容易。假设您没有引用链接或字符串的插件表,这将是您的SQL:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');
UPDATE wp_comments SET comment_content = REPLACE(comment_content,'xcurrentx','xreplacementx');
UPDATE wp_links SET link_description = REPLACE(link_description,'xcurrentx','xreplacementx');
UPDATE wp_options SET option_value = REPLACE(option_value,'xcurrentx','xreplacementx');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_content = REPLACE(post_content,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_title = REPLACE(post_title,'xcurrentx','xreplacementx');
UPDATE wp_posts SET post_excerpt = REPLACE(post_excerpt,'xcurrentx','xreplacementx');
UPDATE wp_term_taxonomy SET description = REPLACE(description,'xcurrentx','xreplacementx');
UPDATE wp_usermeta SET meta_value = REPLACE(meta_value,'xcurrentx','xreplacementx');

答案 3 :(得分:2)

您的问题已于2009年发布,在那一年,另一个人开发了一个基本的php工具,用于在某个数据库的所有表中搜索字符串。或者,您也可以使用不同的字符串替换所有出现的内容。

仍然在5年后(在撰写本文时)对Wordpress安装使用此工具比使用mysql转储更有效且更容易(尽管您可能希望在运行脚本之前创建转储)用于备份目的)。

您可以在其作者Eric Amundson的博客和项目的启动板页面中找到更多信息MySQL Search & Replace

我不相信你在这段时间之后仍然在寻找答案,但我也决定发布我的提示,希望它可以帮助别人在这里突然出现仍在寻找这个问题的解决方案

答案 4 :(得分:1)

还有一个名为Search Regex的Wordpress插件,允许在数据库中运行grep搜索和替换。

答案 5 :(得分:0)

另外还有Brad Larson的答案 - 设置变量如:

SET @what_to_be_replaced = "what_to_be_replaced", @to_be_replaced_by = "to_be_replaced_by";

然后按如下方式使用它:

UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value, @what_to_be_replaced, @to_be_replaced_by );

答案 6 :(得分:0)

MySQL的替换或在 WordPress 中的sql文件或db中手动替换字符串不是一个好方法。 WordPress使用序列化字段,如果您替换其中的某些字符串,则序列化字段可能会中断(这是我的情况)

我使用了Better Search Replace插件,对我来说效果很好