搜索&将'http'替换为数据库中的'https'

时间:2017-03-17 12:43:51

标签: mysql sql phpmyadmin

使用 phpmyadmin ,我想运行一个查询来搜索我的整个数据库:

http://example.com

并替换为:

https://example.com

我的SQL知识有限,可能是这样的:

UPDATE ?? = REPLACE(??, 'http://example.com', 'https://example.com');

数据库超过1GB,所以我可以运行什么使服务器崩溃。

更新:请注意,虽然此处发布的其他答案涉及搜索和替换,但它们似乎并未覆盖整个数据库。

3 个答案:

答案 0 :(得分:28)

使用REPLACE。如果该字段上有索引,则UPDATE可以使用它们

UPDATE t
     set url = REPLACE(url, 'http:', 'https:')
     WHERE url like 'http:%';

仅更改example.com

这只会找到' http://example.com%'

的行
UPDATE t
     set url = REPLACE(url, 'http:', 'https:')
     WHERE url like 'http://example.com%';

或者这会找到包含http://的所有行,但只会将此http://example.com更改为https://example.com

UPDATE t
     set url = REPLACE(url, 'http://example.com', 'https://example.com')
     WHERE url like 'http:%';

答案 1 :(得分:2)

我会使用insert

update t
     set url = insert(url, 5, 0, 's')
     where url like 'http:%';

答案 2 :(得分:0)

警告,到目前为止给出的答案会弄乱序列化的数据!

例如,假设您的站点将序列化数据存储在其中包含URL的行中,如下所示:

a:1:{i:0;s:19:”http://example.com”;}

请注意,此项的值包含19个字符,并在数组中用s:19表示。

如果使用SQL查询替换内容,则新环境中的同一行将最终如下所示:

a:1:{i:0;s:19:”https://example.com”;}

但是在更改之后,该值现在为20个字符长,表示s:19不正确。这会使数组和整个行无效。

因此,您要么确保您的SQL语句处理序列化的数据,要么碰巧使用了WordPress,那么有一些选项可以使用PHP进行搜索,以免破坏序列化的行:

采用并改编自:https://wpengine.com/support/wordpress-serialized-data/