SELECT * FROM news WHERE title LIKE '%a%' 返回大量無關中文記錄(標題不含 'a' 卻被匹配)。
MySQL 預設字符集校對規則(如 gbk_chinese_ci、utf8_general_ci)為**不區分大小寫、且某些多字節字符內部編碼包含 ASCII 字節**,導致模糊匹配誤命中。
WHERE BINARY title LIKE '%a%'WHERE BINARY UCASE(title) LIKE UCASE('%a%')WHERE BINARY UCASE(title) LIKE CONCAT('%', UCASE('a'), '%')%,直接傳入變數 $kw。WHERE BINARY UCASE(title) LIKE CONCAT('%', UCASE($kw), '%')SELECT id, title, name
FROM news
WHERE BINARY UCASE(title) LIKE CONCAT('%', UCASE(?), '%');
? 為預處理參數,防注入、自動處理特殊字符。
BINARY + 函數會導致**全表掃描**,無法使用索引。FULLTEXT + MATCH...AGAINST)或**外部搜尋引擎**(Elasticsearch, Sphinx)。BINARY 修正語義、UCASE 統一大小寫、CONCAT 安全參數化,三招解決中文模糊查詢誤命中與大小寫敏感問題,適合中小型項目快速落地。