Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL批量处理图片URL

MySQL批量处理图片URL统一去掉域名前缀的方法

作者:今天的接口写完了吗?

文章介绍了如何使用MySQL 8.0的新函数REGEXP_REPLACE()批量处理图片URL,去掉域名前缀,将所有图片路径统一存为相对路径,从而避免路径重复和加载错误,需要的朋友可以参考下

在实际开发中,我们常常遇到这样的情况:数据库里存储的图片路径既有完整 URL,也有相对路径。

例如在一张 article 表里:

idimages
1https://cdn.test.com/uploads/20251103/xxx.jpg
2/uploads/20251104/yyy.png,/uploads/20251104/zzz.png
3https://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/[^,]+)'
'\\1'
WHERE images REGEXP 'https?://[^,]*/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. 优点

  1. 一次性批量处理:不需要循环或复杂脚本
  2. 兼容单张和多张图片
  3. 避免前端拼接重复域名
  4. 安全可控:只处理包含完整域名的记录

5. 操作步骤建议

操作之前最好备份一下找个表的数据

6. 总结

利用 MySQL 8.x 的 REGEXP_REPLACE,可以轻松实现:

以上就是MySQL批量处理图片URL统一去掉域名前缀的方法的详细内容,更多关于MySQL批量处理图片URL的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文