MySQL 預設採用 不區分大小寫 的校對規則(如 latin1_swedish_ci、utf8_general_ci),LIKE 'a%' 會同時匹配 A 與 a 開頭的行。少數字符集(如 czech)預設區分大小寫。
使用 COLLATE 子句指定區分大小寫(_cs)或二進制(_bin)校對:
-- 方式 1:列級指定
SELECT * FROM t WHERE col_name COLLATE latin1_general_cs LIKE 'a%';
-- 方式 2:字符串常量級指定
SELECT * FROM t WHERE col_name LIKE 'a%' COLLATE latin1_general_cs;
-- 方式 3:二進制校對(最嚴格,按字節比較)
SELECT * FROM t WHERE col_name COLLATE latin1_bin LIKE 'a%';
CREATE TABLE t (
col_name VARCHAR(100) COLLATE latin1_general_cs -- 或 latin1_bin
) ENGINE=InnoDB;
=, >, ORDER BY, GROUP BY)基於字符的「排序值」,同排序值字符視為相等(如 E, e, É)ORDER BY 升序時 NULL 在前,降序時在後COUNT(col) 忽略 NULL,COUNT(*) 計算行數| 字符集 | 不區分大小寫 (ci) | 區分大小寫 (cs) | 二進制 (bin) |
|---|---|---|---|
| latin1 | latin1_swedish_ci | latin1_general_cs | latin1_bin |
| utf8 | utf8_general_ci | utf8_general_cs | utf8_bin |
| utf8mb4 | utf8mb4_general_ci | utf8mb4_0900_as_cs | utf8mb4_bin |
選擇
_bin可獲得最佳性能與最嚴格比較;_cs則按語言規則區分大小寫但保留字符等價性。