出現問題以及問題分析
- 這條語句會把user_name不為空的所有記錄查詢出來
select *
from user
where user_name like concat('%','_','%')
-
分析:'_':相當於一個占位符,表示占用一個字符,會匹配包含一個字符的所有記錄
-
其他特殊字符:'%':會查詢出所有記錄
解決辦法
-
第一層:使用 '/' 將特殊字符(比如:''、'%')轉義掉,即:使用 '/' 替換 '_',使用 '/%' 替換 '%'
-
第二層:使用 '/' 將 '/'轉義掉,即使用 '//' 替換掉 '/'
* 使用雙斜杠替換單斜杠是因為我們上面為轉義特殊字符而引入單斜杠,所以我們需要把本身的單斜杠轉換為雙斜杠使用(有一點點繞,也可以結合下面的SQL理解)
SQL示例(幫助理解)
-
escape '/' :MySQL中一種語法,表示/之后的符號不被當做通配符使用
-
轉義特殊字符
select *
from user
where user_name like concat('%','/%','%') escape '/' -- 就是指我要查詢user_name中包含 % 的記錄
- 轉義自己
select *
from user
where user_name like concat('%','///%','%') escape '/' -- 查詢包含 '/%'的所有記錄