在mysql中使用正则表达式更改记录的一部分

时间:2013-07-07 05:30:48

标签: mysql regex phpmyadmin

我在localhost上的网站上工作,我的数据库中有一个字段,我存储了一些图片的绝对网址,所以所有记录都像http://localhost/my_project/images/picture.jpg,现在在我的网站上这个记录不起作用,我应该改变所有记录都是这样的' http://www.mysite.com/images/picture.jpg',所以我找到了replace命令用于mysql,但是这个命令将替换字段的所有部分:

UPDATE tablename SET tablefield = replace(tablefield, "findstring", "replacestring");

如何使用phpmyadmin更改记录中的http://localhost/

2 个答案:

答案 0 :(得分:1)

首先,您应该从所有网址中删除域名。简单地使用/images/picture.jpg将允许它在所有主机上运行。

要全局替换它,我建议做一个mysqldump并在文本编辑器中打开文件,替换字符串,然后将其导回数据库。假设您的数据库中没有任何序列化字符串(wordpress)。

答案 1 :(得分:0)

要简单地删除'http://localhost'前缀,以便按照@Rob's answer中的建议使用无主机绝对路径:

UPDATE tablename
SET    tablefield = SUBSTR(tablefield FROM 17)
WHERE  tablefield LIKE 'http://localhost/%'

sqlfiddle上查看。

要替换原始问题中提到的'http://www.mysite.com'

UPDATE tablename
SET    tablefield = CONCAT('http://www.mysite.com', SUBSTR(tablefield FROM 17))
WHERE  tablefield LIKE 'http://localhost/%'

sqlfiddle上查看。

当然,这些答案都没有按照问题标题中的要求使用正则表达式(尽管它们使用简单的模式匹配);要使用正则表达式模式替换,您需要安装和使用lib_mysqludf_preg提供的UDF。