MySQL中使用CONCAT与SUBSTRING处理HTTP/HTTPS URL的更新问题
修复MySQL中嵌套URL的前缀保留问题
看起来你遇到的麻烦是在清理表中的嵌套URL时,误把目标URL的HTTPS前缀替换成了HTTP。别担心,咱们用SUBSTRING_INDEX(配合必要时的CONCAT)来修正这个问题,确保处理后的URL完全保留原有的协议前缀:
问题分析
你的目标链接格式是:
https://this.example.com/work-a-link.php?https://that.example.com/thisisworthkeeping.php
原有代码应该是手动拼接了http://前缀,才导致丢失了原有的https://。正确的思路应该是直接提取?分隔符后的完整目标URL,而不是硬编码协议前缀。
解决方案代码
1. 先备份数据(可选但强烈建议)
先创建临时表备份原数据,避免操作失误:
DROP TABLE IF EXISTS content_temp; CREATE TABLE content_temp AS SELECT * FROM content;
2. 执行正确的更新操作
使用SUBSTRING_INDEX直接提取?后的完整URL,保留原协议前缀:
UPDATE content SET link = SUBSTRING_INDEX(link, '?', -1) WHERE link LIKE '%?https://%' OR link LIKE '%?http://%';
代码解释
SUBSTRING_INDEX(link, '?', -1):这个函数以?为分隔符,提取字段中最后一段内容(-1表示从右往左取第一个分隔符后的内容),也就是我们需要保留的完整目标URL,不管它是https://还是http://前缀,都会原封不动保留。WHERE条件:确保我们只处理包含嵌套URL的记录,避免误修改其他正常链接。
验证效果
执行后,原链接https://this.example.com/work-a-link.php?https://that.example.com/thisisworthkeeping.php会被更新为:
https://that.example.com/thisisworthkeeping.php
完美保留了原有的HTTPS协议前缀。
内容的提问来源于stack exchange,提问作者Snp
相关产品推荐
相关产品推荐

