首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL LIKE 子句完整使用指南:模糊查詢、大小寫敏感與中文匹配技巧

     編輯:MySQL 綜合教學

MySQL LIKE 子句完整使用指南:模糊查詢、大小寫敏感與中文匹配技巧

在 MySQL 中,LIKE 運算符是實現模糊查詢的核心工具,廣泛應用於字符串匹配場景。本文將系統講解其語法、通配符用法、大小寫敏感控制、中文匹配問題以及效能考量,並提供 PHP 應用示例。

基本語法與 NOT LIKE

LIKE 用於 WHERE 子句中,根據指定模式篩選數據:

WHERE column LIKE pattern
WHERE column NOT LIKE pattern

加上 NOT 運算符後,表示選擇 不包含 模式的記錄。若不使用通配符 %,LIKE 退化為精確匹配,等同於 = 運算符。

通配符 % 的核心用法

% 代表任意長度(含零長度)的字符序列。常見組合:

  • '小%':以「小」開頭
  • '%小':以「小」結尾
  • '%小%':包含「小」字符(涵蓋前兩種情況)

例如查詢用戶名包含字母 a 的記錄:

SELECT * FROM user WHERE username LIKE '%a%'

大小寫敏感控制:BINARY 運算符

MySQL 預設 LIKE 不區分大小寫。若需嚴格區分,可加入 BINARY 運算符,強制按二進制比較:

SELECT * FROM user WHERE username LIKE BINARY '%azz%'
SELECT * FROM user WHERE username LIKE BINARY '%aZZ%'

兩條語句將返回不同結果,滿足大小寫敏感需求。

中文字符匹配問題與解決方案

因編碼問題,中文 LIKE 查詢常返回雜訊數據。同樣可用 BINARY 強制二進制比較:

SELECT * FROM user WHERE username LIKE BINARY '%小%'

但這會導致英文大小寫也被嚴格區分。若需「中英文混合、忽略英文大小寫」,可結合 UPPER() 與 CONCAT():

SELECT * FROM username 
WHERE UPPER(username) LIKE BINARY CONCAT('%', UPPER('a中文b'), '%')

將檢索字段與關鍵字統一轉大寫後再做二進制匹配,兼顧中文精確與英文不敏感。

LIKE 效能考量

LIKE 需逐行掃描匹配,效率較低。即使字段有索引,%開頭 的模式也無法使用索引(a% 可用)。大數據量下應盡量減少使用,或考慮全文索引、搜尋引擎等替代方案。

PHP 腳本中使用 LIKE

配合 mysql_query() 執行帶 LIKE 的 SELECT,再用 mysql_fetch_array() 獲取結果。若搭配 DELETE/UPDATE,則無需獲取結果集。

<?php
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) { die('Could not connect: ' . mysql_error()); }
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date 
        FROM tutorials_tbl WHERE tutorial_author LIKE "%jay%"';
mysql_select_db('test');
$retval = mysql_query( $sql, $conn );
if(! $retval ) { die('Could not get data: ' . mysql_error()); }
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
    echo "Tutorial ID :{$row['tutorial_id']} <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved