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

MySQL 大小寫敏感配置全解析:表名、列名、字符集、跨平台遷移避坑

     編輯:MySQL 綜合教學

三層大小寫控制機制

1. 列級:BINARY 屬性 / 字符集 Collation


-- 建表指定列區分大小寫
CREATE TABLE t (name VARCHAR(10) BINARY);  -- 或 CHARSET utf8 COLLATE utf8_bin

-- 查詢時臨時指定
SELECT * FROM t WHERE BINARY name = 'Clip';
  • utf8_general_ci:不區分大小寫(_ci = case insensitive)
  • utf8_bin:二進制比較,嚴格區分大小寫

2. 表名/庫名級:lower_case_table_names 系統變數

修改 /etc/my.cnf(Windows my.ini):


[mysqld]
lower_case_table_names = 0

必須在初始化數據目錄前設定,修改後需重建實例,否則元數據不一致導致啟動失敗。

3. Linux vs Windows 預設差異導致遷移坑

  • Windows 預設 lower_case_table_names=1,建表自動轉小寫
  • Linux 預設 =0,嚴格區分
  • Windows 開發 → Linux 部署時,表名大小寫不一致導致「找不到表」

Linux 下完整大小寫規則

  1. 庫名、表名:**嚴格區分**
  2. 表別名:**嚴格區分**
  3. 列名、列別名:**不區分**
  4. 變量名、用戶定義函數名:**嚴格區分**

跨平台遷移最佳實踐

  1. **統一命名規範**:全部小寫 + 底線分隔(snake_case),如 order_detail
  2. 開發機(Windows/Mac)同步設置 lower_case_table_names=0,強制區分,及早發現問題
  3. 遷移前用 mysqldump --lower-case-table-names=0 導出,保持原大小寫
  4. 目標庫同樣設置 =0

驗證指令


SHOW VARIABLES LIKE 'lower_case_table_names';
SHOW CREATE TABLE t;  -- 觀察實際存儲表名大小寫

大小寫敏感不是小事,**統一 snake_case + lower_case_table_names=0** 是跨平台零故障的鐵律。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
值行為適用 OS
0嚴格區分大小寫,磁盤按原名存儲Linux/Unix 預設
1不區分,存儲為小寫,比較轉小寫Windows 預設、macOS 可選
2存儲原名,比較轉小寫極少用