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

MySQL 中文模糊查詢精準化:BINARY + UCASE + CONCAT 組合拳

     編輯:MySQL 資料庫相關知識

問題現象

SELECT * FROM news WHERE title LIKE '%a%' 返回大量無關中文記錄(標題不含 'a' 卻被匹配)。

根因

MySQL 預設字符集校對規則(如 gbk_chinese_ci、utf8_general_ci)為**不區分大小寫、且某些多字節字符內部編碼包含 ASCII 字節**,導致模糊匹配誤命中。

三步驟精準化方案

  1. BINARY 關鍵字: 強制二進制逐字節比較,繞過校對規則。
    WHERE BINARY title LIKE '%a%'
    ✅ 解決誤命中,❌ 區分大小寫('A' ≠ 'a')。
  2. UCASE 統一大寫: 將欄位與關鍵字同步轉大寫。
    WHERE BINARY UCASE(title) LIKE UCASE('%a%')
    或 WHERE BINARY UCASE(title) LIKE CONCAT('%', UCASE('a'), '%')
  3. CONCAT 參數化: 避免手工拼接 %,直接傳入變數 $kw。
    WHERE BINARY UCASE(title) LIKE CONCAT('%', UCASE($kw), '%')

完整最佳 SQL

SELECT id, title, name
FROM news
WHERE BINARY UCASE(title) LIKE CONCAT('%', UCASE(?), '%');

? 為預處理參數,防注入、自動處理特殊字符。

效能考量

  • BINARY + 函數會導致**全表掃描**,無法使用索引。
  • 大數據量建議:全文索引(FULLTEXT + MATCH...AGAINST)或**外部搜尋引擎**(Elasticsearch, Sphinx)。
  • 小/中表(<10萬行)上述方案完全可接受。

總結

BINARY 修正語義、UCASE 統一大小寫、CONCAT 安全參數化,三招解決中文模糊查詢誤命中與大小寫敏感問題,適合中小型項目快速落地。

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