MySQL 默認不區分大小寫(取決於字符集校對規則)。例外:某些字符集如 czech 默認區分大小寫。
SELECT * FROM t WHERE col LIKE 'a%'; -- 返回 'Apple'、'apple'、'Ángel' 等
CREATE TABLE t ( col VARCHAR(50) CHARACTER SET latin1 COLLATE latin1_general_cs -- _cs = case sensitive );
或使用二進制校對:COLLATE latin1_bin(按字節值比較,最嚴格)。
-- 方式一:列加 COLLATE SELECT * FROM t WHERE col COLLATE latin1_general_cs LIKE 'a%'; -- 方式二:字符串加 COLLATE SELECT * FROM t WHERE col LIKE 'a%' COLLATE latin1_general_cs; -- 方式三:二進制比較 SELECT * FROM t WHERE BINARY col = 'Apple';
SELECT * FROM t WHERE CAST(col AS BINARY) = 'Apple'; SELECT * FROM t WHERE col = BINARY 'Apple';
| 類型 | 比較單位 | 依據 | 大小寫敏感 |
|---|---|---|---|
| 非二進制字符串 (CHAR/VARCHAR/TEXT 無 BINARY) |
字符 | 字符集校對規則權重 | 通常不敏感(同字母不同大小寫權重相同) |
| 二進制字符串 (BLOB、BINARY CHAR/VARCHAR) |
字節 | 字節數值 | 敏感('A'=0x41, 'a'=0x61) |
簡單比較操作符(=, <, >, <=, >=, BETWEEN, IN, ORDER BY, GROUP BY)均遵循上述規則。
WHERE BINARY col = 'val' 或 COLLATE 變更可能導致索引無法使用。建議列級聲明正確校對規則。SET NAMES utf8mb4)應與表字符集一致,避免隱式轉換導致比較異常。UNIQUE INDEX 遵循列校對規則,不敏感校對下 'A' 與 'a' 衝突。ORDER BY col 依賴校對規則,二進制排序按 ASCII 碼(大寫在小寫前),字典序排序按語言規則。_ci:Case Insensitive(不區分大小寫)_cs:Case Sensitive(區分大小寫)_bin:Binary(二進制比較,最快、最嚴格)_general:通用語言規則_unicode_520:基於 Unicode 5.2.0 標準查看支持的校對規則:SHOW COLLATION LIKE 'utf8mb4%';