使用 phpmyadmin ,我想运行一个查询来搜索我的整个数据库:
http://example.com
并替换为:
https://example.com
我的SQL知识有限,可能是这样的:
UPDATE ?? = REPLACE(??, 'http://example.com', 'https://example.com');
数据库超过1GB,所以我可以运行什么不使服务器崩溃。
更新:请注意,虽然此处发布的其他答案涉及搜索和替换,但它们似乎并未覆盖整个数据库。
答案 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/