_bin:二進位比較,**區分大小寫**、區分重音。_cs:Case Sensitive,**區分大小寫**。_ci:Case Insensitive,**不區分大小寫**(預設)。
-- 表級
CREATE TABLE case_bin_test (
word VARCHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
CREATE TABLE case_cs_test (
word VARCHAR(10)
) CHARACTER SET latin1 COLLATE latin1_general_cs;
-- 庫級
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
驗證:
INSERT INTO case_bin_test VALUES ('Frank'),('Google'),('froogle'),('flickr'),('FlicKr');
SELECT * FROM case_bin_test WHERE word LIKE 'f%';
-- 回傳 froogle, flickr
SELECT * FROM case_bin_test WHERE word LIKE 'F%';
-- 回傳 Frank, FlicKr
CREATE TABLE case_test (word VARCHAR(10)) CHARACTER SET latin1; -- 預設 latin1_swedish_ci
INSERT INTO case_test VALUES ('Frank'),('Google'),('froogle'),('flickr'),('FlicKr');
-- 欄位指定 COLLATE
SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'F%';
-- Frank, FlicKr
SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'f%';
-- froogle, flickr
-- 右側常數指定 COLLATE(等效)
SELECT * FROM case_test WHERE word LIKE 'F%' COLLATE latin1_bin;
SELECT * FROM case_test WHERE word LIKE 'f%' COLLATE latin1_bin;
-- 使用 _cs
SELECT * FROM case_test WHERE word LIKE 'F%' COLLATE latin1_general_cs;
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
重啟後新建庫表預設區分大小寫。既有表不受影響,需 ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin。
| Collation | 比較速度 | 適用場景 |
|---|---|---|
| _bin | 最快(位元組逐位比較) | 精確匹配、密碼驗證、程式碼搜尋 |
| _cs | 稍慢(需字元權重表) | 自然語言區分大小寫排序 |
| _ci | 最慢(需正規化) | 一般業務、使用者輸入搜尋 |