在 go 中進(jìn)行 mysql like % 模糊查詢的轉(zhuǎn)義
在 mysql 中進(jìn)行模糊查詢時,如果查詢內(nèi)容包含百分號 (%),則需要對 % 進(jìn)行轉(zhuǎn)義,否則將匹配所有行。本文將介紹如何在 go 中方便地對模糊查詢內(nèi)容進(jìn)行轉(zhuǎn)義。
go 標(biāo)準(zhǔn)庫中提供了 strings.builder 類型,它允許將字符串連接成一個新的字符串。可以使用此類型來手動轉(zhuǎn)義查詢內(nèi)容中的特殊字符。
以下是一個函數(shù) escapelike,它接受三個參數(shù):
- left: 用于連接查詢內(nèi)容左側(cè)的字符(例如左單引號)
- right: 用于連接查詢內(nèi)容右側(cè)的字符(例如右單引號)
- word: 要轉(zhuǎn)義的查詢內(nèi)容
該函數(shù)將遍歷查詢內(nèi)容,檢查是否存在需要轉(zhuǎn)義的字符(%,_,)。如果找到這樣的字符,它將在字符前面添加反斜杠。
以下代碼示例演示了如何使用 escapelike 函數(shù):
import ( "strings" ) func escapelike(left, right, word string) string { var n int for i := range word { if c := word[i]; c == '%' || c == '_' || c == '' { n++ } } // no characters to escape. if n == 0 { return left + word + right } var b strings.builder b.grow(len(word) + n) for _, c := range word { if c == '%' || c == '_' || c == '' { b.writebyte('') } b.writerune(c) } return left + b.string() + right }
調(diào)用 escapelike 函數(shù)時,可以傳入左單引號和右單引號作為 left 和 right 參數(shù)。
需要注意的是,除了 %,_, 之外,mysql 中需要被轉(zhuǎn)義的字符還有:
[ ] ( ) { } | ^ / $
可以在 mysql 官方文檔中找到有關(guān)模糊查詢的更多信息。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END