utf8_general_ci 不敏感、utf8_bin 敏感)Server (my.cnf / 啟動參數) ↓ Database (CREATE DATABASE ... COLLATE) ↓ Table (CREATE TABLE ... COLLATE) ↓ Column (col VARCHAR(10) COLLATE utf8_bin) ↓ Connection (SET NAMES / character_set_connection)
修改上層不影響已存在的下層對象。
# my.cnf [mysqld] collation_server = utf8_bin # 重啟後新建庫繼承 utf8_bin,查詢大小寫敏感
CREATE DATABASE yutest DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; -- 僅影響該庫新建表
CREATE TABLE t1(name VARCHAR(10)) DEFAULT CHARSET utf8 COLLATE utf8_bin; -- 僅影響該表新建欄位
SET NAMES utf8 COLLATE utf8_bin; -- 影響當前會話比較行為
| 方法 | 語法 | 適用場景 |
|---|---|---|
| COLLATE 子句 | WHERE name COLLATE utf8_bin = 'ABC' | 單查詢臨時敏感 |
| BINARY 操作符 | WHERE BINARY name = 'ABC' | 簡寫,等同 COLLATE utf8_bin |
| CAST 轉換 | WHERE CAST(name AS BINARY) = 'ABC' | 明確轉型 |
-- 表預設 utf8_general_ci (CI) SELECT * FROM t1 WHERE name = 'ABC'; -- 返回 ABC, Abc, abc (3 行) SELECT * FROM t1 WHERE BINARY name = 'ABC'; -- 僅返回 ABC (1 行)
my.cnf 不支援 collation_database 參數(啟動報錯)'a' 與 'A' 衝突ORDER BY、GROUP BY、DISTINCT 皆遵循欄位校對規則