核心規則速查表
| 物件 | Linux/Unix | Windows | 備註 |
| 資料庫名 / 表名 | 嚴格區分大小寫 | 不區分 | 對應檔案系統目錄/檔案名 |
| 欄位名 / 欄位別名 | 不區分 | 不區分 | 所有平台一致 |
| 表別名 | 嚴格區分大小寫 | 不區分 | 查詢中引用必須一致 |
| 變數名 | 嚴格區分 | 區分 | 用戶變數、系統變數、預存程序變數 |
| 字串比較 / LIKE | 預設不區分(依照排序規則) | 預設不區分 | 可用 BINARY/排序規則強制區分 |
實際案例:會報錯的寫法
1. 同一查詢混用大小寫引用同一表
SELECT * FROM my_table WHERE MY_TABLE.col = 1; -- Linux 下失敗
2. 表別名大小寫不一致
SELECT col_name FROM tbl_name AS a
WHERE a.col_name = 1 OR A.col_name = 2; -- Linux 下失敗(a vs A)
字串比較深度解析
- 預設排序規則(如
utf8_general_ci):ci = case-insensitive,'A' = 'a','E' = 'e'。
- LIKE 比較:逐字元轉大寫比較,
'E' = 'e'。
- 強制區分大小寫三種方式:
- 欄位定義加
BINARY:col CHAR(10) BINARY
- 比較時用
BINARY 轉型:WHERE col = BINARY 'A'
- 用
STRCMP(col, 'A') = 0 或 col COLLATE utf8_bin = 'A'
示範:BINARY 關鍵字效果
SELECT 'E' = 'e', 'E' = BINARY 'e';
+-----------+------------------+
| 'E' = 'e' | 'E' = BINARY 'e' |
+-----------+------------------+
| 1 | 0 |
+-----------+------------------+
遷移最佳實踐
- 開發規範:統一使用小寫資料庫名、表名、欄位名。
- SQL 中以反引號包裹識別符:
SELECT `col` FROM `table`。
- 跨平台部署前,設定
lower_case_table_names=1(Linux 需檔案系統支援)。
- 字串比較業務若需區分大小寫,明確指定
COLLATE utf8_bin 或 BINARY。