背景:今天在做系統測試的時候,需要按照名稱對資源進行過濾。系統中三個資源的名稱分別為:vm_wang、wq、vm2
當輸入'_'的時候,理想結果為vm_wang,但是實際情況是全部都過濾出來。
原因分析:
查了下《MySQL必知必會》這本書,發現'_'屬於通配符。它的功能是匹配單個字符。
所以當我輸入‘_’的時候,實際執行的sql為 select * from table_name where table_column_name like '%_%'
‘%’通配符的功能是任何字符出現任何次數。所以上述sql的功能就是只要名稱中包含一個字符就可以過濾出。
當我輸入‘___’三個下划線的時候,實際執行的sql為 select * from table_name where table_column_name like '%___%'
過濾的結果為:vm_wang、vm2。因為三個下划線表示名稱至少包含3個字符,所以wq被過濾掉了。
解決方法:
我們傳入的下划線被MySQL默認當成通配符處理了,為了避免這種情況,必須對下划線進行通配符處理,如下所示:
select * from table_name where table_column_name like '%\_%'
查詢結果:vm_wang