MySQL 中資料庫與表名實際對應檔案系統的目錄與檔案,因此大小寫敏感度取決於作業系統檔案系統特性:Windows 不敏感、Linux/Unix 敏感。但可透過 lower_case_table_names 參數統一行為,避免跨平台遷移、開發部署不一致導致的查詢失敗。
| 值 | 儲存大小寫 | 比較敏感度 | 適用場景 |
|---|---|---|---|
| 0 | 保留建表指定大小寫 | 敏感 | Linux 預設,生產環境嚴格區分 |
| 1 | 全部轉小寫儲存 | 不敏感 | Windows/Mac 預設,跨平台相容性最佳 |
| 2 | 保留建表大小寫儲存 | 查詢轉小寫比較 | 僅限不敏感檔案系統(Windows),InnoDB 強制為 1 |
my.ini。[mysqld] 區段新增:lower_case_table_names=0(需敏感)或 =1(不敏感,預設)。注意:若資料目錄已有混合大小寫表名,改為 0 可能導致現有表無法存取。建議全新安裝時即設定,或先將所有表名轉小寫再改參數。
/etc/my.cnf(或 /etc/mysql/my.cnf)。[mysqld] 區段新增:lower_case_table_names=1(建議統一不敏感)或保持預設 0。systemctl restart mysqld 或 service mysql restart。lower_case_table_names=1。表名一律小寫建立,查詢不區分大小寫,完全避免大小寫問題。缺點:SHOW TABLES 顯示皆為小寫,無法看出原始命名風格。-- 建表
CREATE TABLE Tab (id INT PRIMARY KEY);
-- 查詢測試
SELECT * FROM tab; -- lower_case_table_names=1 成功,=0 失敗 (Table 'test.tab' doesn't exist)
SELECT * FROM Tab; -- =0 成功
SELECT * FROM `Tab`; -- 反引號強制精確匹配,=0 成功
lower_case_table_names 控制。utf8mb4_general_ci 不敏感,_bin 敏感)。需區分字串值大小寫時,可:
BINARY 屬性:col VARCHAR(20) BINARYALTER TABLE t MODIFY col VARCHAR(20) BINARY;WHERE BINARY col = 'Abc' 或 WHERE col COLLATE utf8mb4_bin = 'Abc'統一團隊規範:資料庫/表名一律小寫、蛇形命名,配合 lower_case_table_names=1,可徹底消除大小寫坑點。