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

MySQL 中文模糊查詢亂碼問題:BINARY + UCASE 精確匹配方案

     編輯:MySQL 資料庫相關知識

MySQL 默認排序規則下,LIKE '%a%' 會誤匹配不含 'a' 的中文記錄。根因:字符集排序權重導致部分中文字符與 ASCII 字母權重重疊。

問題復現

SELECT id, title FROM news WHERE title LIKE '%a%';
-- 返回標題含 'a' 的記錄,同時混入純中文標題記錄

解決方案:三層防護

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

層層解析

  1. BINARY:強制二進制比較,按字節精確匹配,消除排序規則干擾。
  2. UCASE(title):字段值統一轉大寫,解決大小寫敏感問題。
  3. CONCAT('%', UCASE('關鍵字'), '%'):關鍵字同樣轉大寫並拼接通配符,應用層無需手動加 %。

等效寫法

WHERE BINARY UCASE(title) LIKE UCASE('%a%')

性能代價

  • BINARY 導致無法使用索引,全表掃描,查詢時間增加 N 毫秒。
  • 大表建議:全文索引(FULLTEXT)或外部搜尋引擎(Elasticsearch)。

適用場景

中英文混合、大小寫不敏感、精確字符匹配的中小表模糊查詢。

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