MySQL批量处理图片URL统一去掉域名前缀的方法
作者:今天的接口写完了吗?
文章介绍了如何使用MySQL 8.0的新函数REGEXP_REPLACE()批量处理图片URL,去掉域名前缀,将所有图片路径统一存为相对路径,从而避免路径重复和加载错误,需要的朋友可以参考下
在实际开发中,我们常常遇到这样的情况:数据库里存储的图片路径既有完整 URL,也有相对路径。
例如在一张 article 表里:
| id | images |
|---|---|
| 1 | https://cdn.test.com/uploads/20251103/xxx.jpg |
| 2 | /uploads/20251104/yyy.png,/uploads/20251104/zzz.png |
| 3 | https://cdn.test.com/uploads/20251104/aaa.png,/uploads/20251104/bbb.png |
如果前端代码统一拼接 CDN 域名,混合存储就会导致路径重复,从而出现加载错误或者多余前缀的问题。
为了统一管理,我们希望把所有图片 URL 统一存成 相对路径,只保留 /uploads/... 部分。
1. MySQL 8.x 提供了 REGEXP_REPLACE
MySQL 8.0 开始,支持 REGEXP_REPLACE() 函数,它可以使用正则批量替换字符串,非常适合处理 URL。
语法:
REGEXP_REPLACE(str, pattern, repl)
str:需要处理的字符串
pattern:正则表达式
repl:替换的内容
2. 示例:批量去掉域名前缀
UPDATE article SET images = REGEXP_REPLACE(images, 'https?://[^,]*(/uploads/[^,]+)', '\\1') WHERE images REGEXP 'https?://[^,]*/uploads/';
解释:
'https?://[^,]*(/uploads/[^,]+)'
https?://:匹配http://或https://[^,]*:匹配 URL 域名部分,直到逗号或/uploads/(/uploads/[^,]+):捕获/uploads/...路径
'\\1'
- 替换为捕获的
/uploads/...部分,去掉域名
WHERE images REGEXP 'https?://[^,]*/uploads/'
- 只处理包含完整域名的记录,避免影响已经是
/uploads/...的记录
3. 支持单张或多张图片
这条 SQL 适合以下几种情况:
单张图片:
https://cdn.test.com/uploads/20251103/xxx.jpg → /uploads/20251103/xxx.jpg
多张图片(逗号分隔):
https://cdn.test.com/uploads/20251104/aaa.png,/uploads/20251104/bbb.png → /uploads/20251104/aaa.png,/uploads/20251104/bbb.png
已经是相对路径的记录不会改变。
4. 优点
- 一次性批量处理:不需要循环或复杂脚本
- 兼容单张和多张图片
- 避免前端拼接重复域名
- 安全可控:只处理包含完整域名的记录
5. 操作步骤建议
操作之前最好备份一下找个表的数据
6. 总结
利用 MySQL 8.x 的 REGEXP_REPLACE,可以轻松实现:
- 批量去掉图片 URL 前缀
- 支持单张、多张图片
- 保证数据库中统一存相对路径
以上就是MySQL批量处理图片URL统一去掉域名前缀的方法的详细内容,更多关于MySQL批量处理图片URL的资料请关注脚本之家其它相关文章!
