在 WHERE title LIKE '%a%' 查詢中,純中文標題也會被誤判匹配,原因是預設校對規則 (Collation) 將英文字母與部分中文編碼視為相等。
SELECT * FROM news WHERE BINARY title LIKE '%a%';
SELECT * FROM news WHERE BINARY UCASE(title) LIKE UCASE('%a%');
SELECT * FROM news
WHERE BINARY UCASE(title) LIKE CONCAT('%', UCASE('搜尋關鍵字'), '%');
ALTER TABLE news ADD FULLTEXT(title) WITH PARSER ngram; (支援中文分詞)。ALTER TABLE news
ADD COLUMN title_upper VARCHAR(200)
GENERATED ALWAYS AS (UPPER(title)) STORED,
ADD INDEX idx_title_upper (title_upper);
-- 查詢可用索引
SELECT * FROM news WHERE title_upper LIKE CONCAT('%', UPPER('關鍵字'), '%');
| 方案 | 可用索引 | 大小寫敏感 | 適用場景 |
|---|---|---|---|
| BINARY LIKE | 否 | 是 | 小表、臨時查詢 |
| UCASE + BINARY | 否 | 否 | 中小表、不區分大小寫 |
| 生成欄位 + 索引 | 是 | 否 | 大表、高頻查詢 |
| ngram 全文索引 | 是 | 否 | 專業搜尋、分詞需求 |