MySQL批量處理圖片URL統(tǒng)一去掉域名前綴的方法
在實(shí)際開發(fā)中,我們常常遇到這樣的情況:數(shù)據(jù)庫里存儲的圖片路徑既有完整 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 |
如果前端代碼統(tǒng)一拼接 CDN 域名,混合存儲就會導(dǎo)致路徑重復(fù),從而出現(xiàn)加載錯(cuò)誤或者多余前綴的問題。
為了統(tǒng)一管理,我們希望把所有圖片 URL 統(tǒng)一存成 相對路徑,只保留 /uploads/... 部分。
1. MySQL 8.x 提供了 REGEXP_REPLACE
MySQL 8.0 開始,支持 REGEXP_REPLACE() 函數(shù),它可以使用正則批量替換字符串,非常適合處理 URL。
語法:
REGEXP_REPLACE(str, pattern, repl)
str:需要處理的字符串
pattern:正則表達(dá)式
repl:替換的內(nèi)容
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/'
- 只處理包含完整域名的記錄,避免影響已經(jīng)是
/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
已經(jīng)是相對路徑的記錄不會改變。
4. 優(yōu)點(diǎn)
- 一次性批量處理:不需要循環(huán)或復(fù)雜腳本
- 兼容單張和多張圖片
- 避免前端拼接重復(fù)域名
- 安全可控:只處理包含完整域名的記錄
5. 操作步驟建議
操作之前最好備份一下找個(gè)表的數(shù)據(jù)
6. 總結(jié)
利用 MySQL 8.x 的 REGEXP_REPLACE,可以輕松實(shí)現(xiàn):
- 批量去掉圖片 URL 前綴
- 支持單張、多張圖片
- 保證數(shù)據(jù)庫中統(tǒng)一存相對路徑
以上就是MySQL批量處理圖片URL統(tǒng)一去掉域名前綴的方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL批量處理圖片URL的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫的方法
這篇文章主要介紹了mysql如何利用Navicat導(dǎo)出和導(dǎo)入數(shù)據(jù)庫的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-02-02
根據(jù)status信息對MySQL服務(wù)器進(jìn)行優(yōu)化
網(wǎng)上有很多的文章教怎么配置MySQL服務(wù)器,但考慮到服務(wù)器硬件配置的不同,具體應(yīng)用的差別,那些文章的做法只能作為初步設(shè)置參考,我們需要根據(jù)自己的情況進(jìn)行配置優(yōu)化,好的做法是MySQL服務(wù)器穩(wěn)定運(yùn)行了一段時(shí)間后運(yùn)行,根據(jù)服務(wù)器的”狀態(tài)”進(jìn)行優(yōu)化。2011-09-09

