通常我使用手动查找替换文本在MySQL数据库使用phpMyAdmin。我现在厌倦了,我怎么能运行一个查询,在phpMyAdmin的整个表中找到和替换一个新的文本?

例如:查找关键字domain。例如,替换为www.domain.example。


当前回答

UPDATE  `MySQL_Table` 
SET  `MySQL_Table_Column` = REPLACE(`MySQL_Table_Column`, 'oldString', 'newString')
WHERE  `MySQL_Table_Column` LIKE 'oldString%';

其他回答

我发现的最简单的方法是将数据库转储到一个文本文件中,运行sed命令进行替换,然后将数据库重新加载回MySQL。

下面所有命令都是Linux下的bash命令。

转储数据库到文本文件

mysqldump -u user -p databasename > ./db.sql

执行sed命令查找/替换目标字符串

sed -i 's/oldString/newString/g' ./db.sql

重新加载数据库到MySQL

mysql -u user -p databasename < ./db.sql

容易peasy。

我相信“swapnesh”答案是最好的!不幸的是,我不能执行它在phpMyAdmin(4.5.0.2)谁虽然不合逻辑(并尝试了几件事),它一直说,一个新的语句被发现,没有分隔符被发现…

因此,我提出了以下解决方案,如果您遇到同样的问题,并且除了PMA之外没有其他访问数据库的方法,可能会很有用……

UPDATE `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid` 
 FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
SET `toUpdate`.`guid`=`updated`.`guid`
WHERE `toUpdate`.`ID`=`updated`.`ID`;

要测试预期的结果,您可能需要使用:

SELECT `toUpdate`.`guid` AS `old guid`,`updated`.`guid` AS `new guid`
FROM `wp_posts` AS `toUpdate`,
(SELECT `ID`,REPLACE(`guid`,'http://old.tld','http://new.tld') AS `guid`
 FROM `wp_posts` WHERE `guid` LIKE 'http://old.tld%') AS `updated`
WHERE `toUpdate`.`ID`=`updated`.`ID`;

phpMyAdmin包含一个简洁的查找和替换工具。

选择表,然后点击Search > Find and replace

这个查询花费了大约一分钟的时间,成功地替换了几千个oldurl实例。用新url进行扩展。列post_content中的ext

这个方法最棒的地方是:你可以在提交之前检查每个匹配。

注意:我使用phpMyAdmin 4.9.0.1

当在phpmyadmin中进行搜索和替换时,我有很好的运气:

更新表名SET fieldName1 = 'foo' WHERE fieldName1 = 'bar';

当然,这一次只适用于一个表。

在phpMyAdmin中运行SQL查询来查找和替换所有WordPress博客文章中的文本,例如查找mysite。Example /wordpress,然后用mysite。Example /news替换 本例中的表为tj_posts

UPDATE `tj_posts`
SET `post_content` = replace(post_content, 'mysite.example/wordpress', 'mysite.example/news')