首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 大小寫敏感度完整解析:表名、欄位名與跨平台遷移坑點

     編輯:MySQL 資料庫相關知識

一、欄位值比對的大小寫控制

1. 預設行為:不區分大小寫

CREATE TABLE `NAME` (`name` VARCHAR(10));
SELECT * FROM `NAME` WHERE `name` = 'clip';
SELECT * FROM `NAME` WHERE `name` = 'Clip';  -- 結果相同

2. 建表時指定 BINARY 屬性強制區分

CREATE TABLE `NAME` (
    `name` VARCHAR(10) BINARY
);

3. 查詢語句中使用 BINARY 運算子

SELECT * FROM `NAME` WHERE BINARY `name` = 'Clip';

4. 透過 Collation 設定

  • utf8_general_ci(預設):不區分大小寫(ci = case insensitive)
  • utf8_bin:區分大小寫(二進位比對)

二、識別符(表名、資料庫名、別名)的大小寫規則

Windows vs Linux 差異

項目WindowsLinux
資料庫名不區分區分
表名不區分區分
欄位名不區分不區分
表別名不區分區分
欄位別名不區分不區分
變數名不區分區分

跨平台遷移常見問題

Windows 開發時表名自動轉小寫,遷移至 Linux 後因大小寫敏感導致找不到表。

解決方案:統一設定 lower_case_table_names

[mysqld]
lower_case_table_names = 0  # 0=區分大小寫, 1=不區分(預設 Windows), 2=儲存原大小寫但比對不區分
  • 建議:開發、測試、生產環境統一設為 0(區分大小寫),避免遷移驚喜
  • 修改後需重啟 MySQL 服務生效
  • Windows 下修改 my.ini,Linux 下修改 my.cnf

最佳實踐總結

  1. 命名規範:全部小寫 + 底線分隔(如 user_profile)
  2. 建表明確指定 CHARSET utf8mb4 COLLATE utf8mb4_bin 需區分大小寫的欄位
  3. 跨平台部署前,務必統一 lower_case_table_names 設定
  4. SQL 語句中識別符一律使用反引號 ` 包裹
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved