【问题标题】:Search & replace 'http' to 'https' in database在数据库中搜索并将“http”替换为“https”
【发布时间】:2023-03-28 20:25:02
【问题描述】:

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

http://example.com

并替换为:

https://example.com

我的 SQL 知识有限,大概是这样的:

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

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

更新:请注意,虽然在 SO 上发布了其他有关搜索和替换的答案,但它们似乎并未涵盖整个数据库。

【问题讨论】:

  • UPDATE 仅适用于一张表,您必须指定要更新的列。
  • @jarlh 搜索整个数据库而不是一个表/列的解决方案是什么?
  • "请注意,虽然在 SO 上发布了其他有关搜索和替换的答案,但它们似乎并未涵盖整个数据库。"我链接到的重复线程涵盖了这一点。
  • 我会简单地导出整个数据库 - 然后在 sublime 或任何其他带有 SAR 的文本编辑器中进行搜索和替换,然后重新上传。

标签: mysql sql phpmyadmin


【解决方案1】:

使用替换。如果字段上有索引,则 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:%';

【讨论】:

  • 如何让它只针对example.com域?您的代码会影响所有表吗? UPDATE t 中的 t 代表什么?一些澄清将非常感激。谢谢!
  • 我已将其添加到我的答案中
  • 这将替换以下术语loremhttp://example.com/ipsum.htmlarray('hellohttp://example.com/go.html') 等数组条目吗?
  • 非常有用。我将后半部分修改为:like '%http:%'
【解决方案2】:

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

例如,假设您的网站将序列化数据存储在一行中,其中包含 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/

【讨论】:

  • -1 因为 OP 询问他如何使用 phpmyadmin 执行操作 - 而不是使用插件。您的警告是一项宝贵的贡献-非常感谢,但这不是问题的答案。请添加适当的 SQL 语句以在 phpmyadmin 中使用并删除插件的链接。如果我看到符合指南的更新答案,我会 +1 -1。
  • @TobiasBeuving 我编辑了答案以使其更具主题性,通常指向确保 SQL 语句处理序列化数据。关于 WordPress 插件部分,我在它前面加上了“如果你碰巧在使用 WordPress”,所以现在它看起来更像是一个额外的建议。
【解决方案3】:

我会使用insert:

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

【讨论】:

  • 您能否更新您的答案并解释您的代码?如何使其仅针对 example.com 域? update t 部分是什么?
  • update t 是更新表的语法; t 是表格。如果你想定位example.com,那么你把它包含在where子句中,可能是where url like 'example.com/%'`或类似的东西。
猜你喜欢
  • 2018-12-15
  • 2011-05-09
  • 2019-04-07
  • 2021-09-27
  • 2014-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
相关资源
最近更新 更多