MySQL 預設不區分大小寫(依照校對規則,如 utf8_general_ci 的 ci = case-insensitive)。
CREATE TABLE t1(name VARCHAR(10));
INSERT INTO t1 VALUES ('you'),('You'),('YOU');
SELECT * FROM t1 WHERE name='you'; -- 返回 3 筆
SELECT * FROM t1 WHERE name='YOU'; -- 返回 3 筆
ALTER TABLE t1 CHANGE name name VARCHAR(10) BINARY; -- 或建表時 CREATE TABLE t1(name VARCHAR(10) BINARY);
效果:
SELECT * FROM t1 WHERE name='you'; -- 僅返回 'you' SELECT * FROM t1 WHERE name='YOU'; -- 僅返回 'YOU'
SELECT * FROM t1 WHERE name = BINARY 'YOU'; -- 僅返回 'YOU' SELECT * FROM t1 WHERE name = BINARY 'you'; -- 僅返回 'you'
lower_case_table_names(影響表名、資料庫名)# my.cnf / my.ini [mysqld] lower_case_table_names=1 # 0=區分大小寫, 1=不區分(預設 Windows/Mac), 2=存儲按給定大小寫但比較不區分
重啟後驗證:
SHOW VARIABLES LIKE 'lower_case_table_names';
注意:此參數不影響欄位值的大小寫比較,僅影響識別符(表名、庫名、欄位名)的大小寫敏感度。
| 校對規則後綴 | 含義 | 大小寫敏感 |
|---|---|---|
| _ci | case-insensitive | 否 |
| _cs | case-sensitive | 是 |
| _bin | binary(按位元組比較) | 是 |
建表/修改欄位時可指定:
CREATE TABLE t1(name VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_bin);
BINARY 或 COLLATE utf8_binBINARYlower_case_table_names=1 並以小寫命名