首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 資料表大小寫敏感設定三種方式:欄位層級、SQL 層級、服務層級

     編輯:MySQL 綜合教學

預設行為

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 筆

方式一:欄位層級加 BINARY(永久生效)

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'

方式二:SQL 查詢時加 BINARY(臨時生效)

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';

注意:此參數不影響欄位值的大小寫比較,僅影響識別符(表名、庫名、欄位名)的大小寫敏感度。

校對規則對照表

校對規則後綴含義大小寫敏感
_cicase-insensitive否
_cscase-sensitive是
_binbinary(按位元組比較)是

建表/修改欄位時可指定:

CREATE TABLE t1(name VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_bin);

選型建議

  • 特定欄位需嚴格區分(帳號、密碼雜湊、代碼) → BINARY 或 COLLATE utf8_bin
  • 臨時查詢需區分 → SQL 加 BINARY
  • 跨平台遷移(Linux ↔ Windows)表名大小寫問題 → 統一設 lower_case_table_names=1 並以小寫命名
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved