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

MySQL 區分大小寫查詢三大實現方法:Collation 設定、建表指定、查詢時指定

     編輯:MySQL 資料庫相關知識

Collation 命名規則

  • _bin:二進位比較,**區分大小寫**、區分重音。
  • _cs:Case Sensitive,**區分大小寫**。
  • _ci:Case Insensitive,**不區分大小寫**(預設)。

方法一:建表/建庫指定 Collation(永久生效)


-- 表級
CREATE TABLE case_bin_test (
    word VARCHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;

CREATE TABLE case_cs_test (
    word VARCHAR(10)
) CHARACTER SET latin1 COLLATE latin1_general_cs;

-- 庫級
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

驗證:


INSERT INTO case_bin_test VALUES ('Frank'),('Google'),('froogle'),('flickr'),('FlicKr');

SELECT * FROM case_bin_test WHERE word LIKE 'f%';
-- 回傳 froogle, flickr

SELECT * FROM case_bin_test WHERE word LIKE 'F%';
-- 回傳 Frank, FlicKr

方法二:查詢時指定 COLLATE(臨時、靈活)


CREATE TABLE case_test (word VARCHAR(10)) CHARACTER SET latin1;  -- 預設 latin1_swedish_ci

INSERT INTO case_test VALUES ('Frank'),('Google'),('froogle'),('flickr'),('FlicKr');

-- 欄位指定 COLLATE
SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'F%';
-- Frank, FlicKr

SELECT * FROM case_test WHERE word COLLATE latin1_bin LIKE 'f%';
-- froogle, flickr

-- 右側常數指定 COLLATE(等效)
SELECT * FROM case_test WHERE word LIKE 'F%' COLLATE latin1_bin;
SELECT * FROM case_test WHERE word LIKE 'f%' COLLATE latin1_bin;

-- 使用 _cs
SELECT * FROM case_test WHERE word LIKE 'F%' COLLATE latin1_general_cs;

方法三:修改伺服器預設(my.cnf,影響新建庫表)


[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin

重啟後新建庫表預設區分大小寫。既有表不受影響,需 ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin。

效能與選擇建議

  1. 大多數 Web 應用**不需要**區分大小寫,保持 _ci 利於使用者體驗。
  2. 需區分時,**優先用查詢時指定 COLLATE**,避免改動結構影響其他查詢。
  3. 密碼、Token、程式碼片段搜尋建議欄位用 _bin。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
Collation比較速度適用場景
_bin最快(位元組逐位比較)精確匹配、密碼驗證、程式碼搜尋
_cs稍慢(需字元權重表)自然語言區分大小寫排序
_ci最慢(需正規化)一般業務、使用者輸入搜尋