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

MySQL 搜尋大小寫敏感度:預設不敏感、COLLATE 強制敏感、二進位比較、字符集關係

     編輯:MySQL 資料庫相關知識

MySQL 預設搜尋**不區分大小寫**(除特定字符集如 czech)。本文說明如何用 COLLATE 強制大小寫敏感、資料表層級預設排序規則、簡單比較運算的排序值邏輯。

預設行為

SELECT * FROM t WHERE col LIKE 'a%';
-- 會匹配 'apple', 'Apple', 'APPLE' 等

查詢層級強制大小寫敏感

使用 COLLATE 指定區分大小寫(_cs)或二進位(_bin)排序規則:

-- 方式 1:欄位套用 COLLATE
SELECT * FROM t WHERE col COLLATE latin1_general_cs LIKE 'a%';

-- 方式 2:字串常數套用 COLLATE
SELECT * FROM t WHERE col LIKE 'a%' COLLATE latin1_general_cs;

-- 方式 3:二進位比較(最快、最嚴格)
SELECT * FROM t WHERE col COLLATE latin1_bin LIKE 'a%';

資料表/欄位層級預設大小寫敏感

-- 建表時指定
CREATE TABLE t (
    col VARCHAR(50) COLLATE latin1_general_cs  -- 或 utf8mb4_bin
);

-- 修改既有欄位
ALTER TABLE t MODIFY col VARCHAR(50) COLLATE latin1_general_cs;

常用區分大小寫排序規則

簡單比較運算的排序值邏輯

  • >=, >, =, <, <=, ORDER BY, GROUP BY 皆基於**字符排序值**
  • 相同排序值字符視為相等:'E' = 'e' = 'É'(在 _general_ci 下)
  • _bin 排序規則:按位元組值比較,嚴格區分

效能提醒

  • ⚠️ COLLATE 在 WHERE 中可能導致**索引失效**(無法使用該欄位索引)
  • ✅ 欄位預設 COLLATE 可正常使用索引
  • ✅ _bin 比較最快,無需字符集轉換

實務建議

  • ✅ 系統預設用 utf8mb4_general_ci 或 utf8mb4_0900_ai_ci(不敏感、支援 Emoji)
  • ✅ 需大小寫敏感的欄位(如密碼、代碼、URL slug)**建表時指定 _bin 或 _cs**
  • ✅ 臨時查詢用 COLLATE ..._bin,避免全表掃描加 EXPLAIN 驗證
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
字符集區分大小寫 (cs)二進位
latin1latin1_general_cslatin1_bin
utf8utf8_general_csutf8_bin
utf8mb4utf8mb4_0900_as_csutf8mb4_bin