MySQL 預設字元集為 latin1(ISO-8859-1),導致中文 LIKE '%關鍵字%' 查詢出現誤匹配或亂碼。本文提供四種解決方案,依環境選擇適合者。
MySQL 在比較字串時預設大小寫不敏感,且以單位元組字元集處理,多位元組中文字元(GBK/UTF-8)被拆解為單位元組比較,導致「李」字可能匹配到不相關記錄。
ALTER TABLE `table_name` MODIFY `field_name` VARCHAR(255) BINARY;
或建表時指定:name CHAR(10) BINARY。強制二進位比較,精確匹配位元組序列。
./configure --with-charset=gbk --with-extra-charsets=all
從根本解決排序與比較問題,但需重新編譯安裝,適合全新部署。
SELECT * FROM `table` WHERE LOCATE(`field`, '關鍵字') > 0;
LOCATE(substr, str) 回傳子字串在字串中首次出現位置(1-based),未找到回傳 0。本站採用此法,相容性佳。
SELECT * FROM `table` WHERE `field` LIKE BINARY '%關鍵字%';
單次查詢強制二進位比較,不影響欄位定義。
SET NAMES utf8mb4(支援 Emoji)。