首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL LIKE 模糊查詢通配符轉義完全指南

     編輯:MySQL 資料庫相關知識

通配符速查

通配符含義示例匹配
%任意長度字符(含 0 個)'abc%' 匹配 'abc', 'abcdef'
_單個任意字符'ab_' 匹配 'abc', 'ab1'

問題場景

需查詢字面值包含 % 或 _ 的數據,如:'60%'、'user_name'。

方法一:反斜杠轉義(默認轉義字符)

-- 查詢以 '60%' 開頭的記錄
SELECT * FROM score WHERE percent LIKE '60\%%';
-- 解析:第一個 % 是通配符,第二個 \% 是字面 %

適用: 單條查詢、動態 SQL 拼接

方法二:ESCAPE 自定義轉義字符

-- 使用 / 作為轉義字符
SELECT * FROM score WHERE percent LIKE '60/%' ESCAPE '/';
-- 解析:/ 後面的 % 被轉義為字面 %,前面無 / 的 % 仍是通配符

優勢: 避免反斜杠在字符串字面量中需雙重轉義(如 '60\\%'),可讀性更好

完整測試用例

CREATE TABLE t_escape (col VARCHAR(20));
INSERT INTO t_escape VALUES ('60%'), ('60_percent'), ('user_name'), ('user-name');

-- 1. 查詢字面 '60%'
SELECT * FROM t_escape WHERE col LIKE '60\%%';           -- 反斜杠
SELECT * FROM t_escape WHERE col LIKE '60/%' ESCAPE '/'; -- ESCAPE

-- 2. 查詢包含下劃線的記錄
SELECT * FROM t_escape WHERE col LIKE '%\_%';            -- 反斜杠轉義 _
SELECT * FROM t_escape WHERE col LIKE '%/_%' ESCAPE '/'; -- ESCAPE 轉義 _

-- 3. 查詢以 'user_' 開頭
SELECT * FROM t_escape WHERE col LIKE 'user\_%';         -- 匹配 'user_name'
SELECT * FROM t_escape WHERE col LIKE 'user_/%' ESCAPE '/';

編程語言中雙重轉義陷阱

語言字符串字面量實際 SQL
Java"60\\\\%"60\\%
Pythonr"60\\%"60\%
C#@"60\\%"60\%
PHP"60\\\\%"60\%

建議: 應用層統一使用 ESCAPE '/' 方案,避免多層轉義心智負擔

性能提示

  1. 前導通配符 %abc 導致全表掃描,轉義不改變此特性
  2. 後置通配符 abc% 可走索引,轉義同樣適用
  3. 全文搜索需求:大量模糊查詢請用 Fulltext 索引或 Elasticsearch
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved