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

MySQL 通配符陷阱:下劃線 `_` 也是單字符通配符

     編輯:MySQL 資料庫相關知識

現象重現

表 action_conf 含資料:

exp_site_10_001
exp_site_10_002
exp_site_11_001

查詢 exp_site_10_ 開頭記錄:

SELECT en_name FROM action_conf WHERE en_name LIKE 'exp_site_10_%';

結果:所有 exp_site_10 開頭的記錄全被匹配(含 exp_site_100_... 等)。

根因

SQL 標準中 _ 代表任意單字符,% 代表任意多字符。exp_site_10_% 實際匹配「exp_site_10 + 任意字符 + 任意字串」。

正確寫法:轉義下劃線

SELECT en_name FROM action_conf WHERE en_name LIKE 'exp\_site\_10\_%';

預設轉義字符為 \,可用 ESCAPE '|' 自定義。

通配符完整對照表

通配符含義範例匹配
%0 個或多個字符'abc%' → abc, abcd, abcdef
_恰好 1 個字符'ab_' → abc, ab1, ab中
[charlist]字符集合中任一字符'[abc]' → a, b, c
[^charlist] / [!charlist]不在字符集合中'[^abc]' → d, 1, 中

避坑提醒

  • 動態拼接 LIKE 模式時,必須轉義用戶輸入中的 %、_、[、]
  • MySQL ESCAPE 只接受單字符,不可用字串
  • 參數化查詢同樣需應用層手動轉義 LIKE 參數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved