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

 更新时间:2025年11月11日 09:39:40   作者:今天的接口写完了吗?  
文章介绍了如何使用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/[^,]+)'
  • 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. 优点

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

5. 操作步骤建议

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

6. 总结

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

  • 批量去掉图片 URL 前缀
  • 支持单张、多张图片
  • 保证数据库中统一存相对路径

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

相关文章

  • 通过MySQL优化Discuz!的热帖翻页的技巧

    通过MySQL优化Discuz!的热帖翻页的技巧

    这篇文章主要介绍了通过MySQL优化Discuz!的热帖翻页的技巧,包括更新索引来降低服务器负载等方面,需要的朋友可以参考下
    2015-05-05
  • mysql如何利用Navicat导出和导入数据库的方法

    mysql如何利用Navicat导出和导入数据库的方法

    这篇文章主要介绍了mysql如何利用Navicat导出和导入数据库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Innodb中mysql快速删除2T的大表方法示例

    Innodb中mysql快速删除2T的大表方法示例

    这篇文章主要给大家介绍了关于Innodb中mysql快速删除2T的大表的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • MySQL允许远程连接的配置指南

    MySQL允许远程连接的配置指南

    MySQL 是一个广泛使用的开源关系型数据库管理系统,在实际开发中,我们经常需要从本地或外部服务器连接到 MySQL 数据库,下面我们就来看看如何配置 MySQL 以允许远程连接
    2025-06-06
  • mysql8.0无法使用group by的问题及解决

    mysql8.0无法使用group by的问题及解决

    这篇文章主要介绍了mysql8.0无法使用group by的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 关于mysql 的时间类型选择

    关于mysql 的时间类型选择

    本篇文章是对mysql中的时间类型选择进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL的表空间是什么

    MySQL的表空间是什么

    这篇文章主要介绍了MySQL的表空间是什么,帮助大家更好的理解和使用MySQL表的相关知识,感兴趣的朋友可以了解下
    2020-11-11
  • 根据status信息对MySQL服务器进行优化

    根据status信息对MySQL服务器进行优化

    网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一段时间后运行,根据服务器的”状态”进行优化。
    2011-09-09
  • MySQL学习之事务详解

    MySQL学习之事务详解

    在数据库中 事务(transaction) 可以把多个SQL给打包到一起, 即将多个SQL语句变成一个整体, 也就是说一个事务中的所有操作要么全部成功执行, 要么完全不执行.本文主要来和大家聊聊事务的使用,需要的可以参考一下
    2022-12-12
  • MySQL中按时间获取慢日志信息的方法

    MySQL中按时间获取慢日志信息的方法

    这篇文章主要介绍了MySQL中按时间获取慢日志信息的方法,使用到了cutlogbytime这个工具,主要操作是设置时间戳,需要的朋友可以参考下
    2015-05-05

最新评论