3

这是我的情况:

我的公司为客户托管多个站点,站点的内容存储在 MySQL 数据库中。

我有一个问题,我需要遍历整个数据库并替换部分内容。例如:

我需要用//downloads.mysever.com/siteID/someImage.jpg替换http://downloads.mysever.com/siteID/someImage.jpg

所以我只需要从所有链接到我们的下载服务器的链接中删除http:。

我的问题是解决这个问题的最佳方法是什么?我是否需要编写一个 php 脚本来处理这个,或者我可以只使用 MySQL 来完成这个。

谢谢

4

5 回答 5

2

你可以使用sql语句

 UPDATE tablename SET url = REPLACE(url, 'http:', '');

阅读这篇博文

您可以使用命令行执行此命令

mysql -uUSERNAME -p DATABASE_NAME -e "UPDATE tablename SET url = REPLACE(url, 'http:', '')";
于 2012-12-19T16:32:36.027 回答
2

你可以用纯mysql做到这一点:

update table set field = REPLACE(field, 'http:', '') where INSTR(field, 'http:') > 0;

看到这个问题

于 2012-12-19T16:33:02.140 回答
0

如果您能够使数据库短暂脱机,我发现最简单的方法是:

  1. 使用 mysqldump 导出整个数据库
  2. 在您喜欢的任何编辑器中运行查找和替换以更新数据库转储
  3. 从转储文件重新创建数据库 - 确保一切正常,然后用新版本替换原始数据库。
于 2012-12-19T16:31:50.763 回答
0

要删除表中所有行的前导'http:'字符串(从字符类型列中),那么简单的方法就可以了:

UPDATE mytable
   SET mycol = SUBSTRING(mycol,6)
 WHERE mycol LIKE 'http:%'

更新:

请注意,使用该REPLACE函数将从字符串中替换所有出现的指定字符串;它可能不适合仅删除指定字符串的前导出现。

如果要删除在列值中找到的所有“http:”,则:

UPDATE mytable
   SET mycol = REPLACE( mycol , 'http:, '')
 WHERE mycol LIKE '%http:%'

MySQL 确实提供了对正则表达式的支持,特别是查找与给定正则表达式匹配的值;但 MySQL 不支持使用正则表达式进行“替换”。

所以你可以在查询中使用它:

 WHERE mycol REGEXP 'http:'

代替(相当于):

 WHERE mycol LIKE '%http:%'
于 2012-12-19T16:46:21.863 回答
0

MySQL 确实提供了正则表达式功能。该功能可能过于详细,无法在此处介绍,因此这里是链接:

http://dev.mysql.com/doc/refman/5.5/en/regexp.html

您的示例案例的基本用法示例是:

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field REGEXP '^http:'

但是请注意,这种情况可以在没有正则表达式的情况下通过简单地执行以下操作来完成:

UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field LIKE 'http:%'

因此,您可能不需要对要执行的每种替换类型使用正则表达式。

于 2012-12-19T16:42:37.620 回答