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

MySQL 大小寫不敏感查詢問題:兩種徹底解決方案

     編輯:關於SqlServer

現象

輸入 aaa、aaA、AAA 皆回傳相同結果,預設 不區分大小寫。

方案一:查詢層級指定 COLLATE

COLLATE 規則速查

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

方法 1:BINARY() 函數

SELECT * FROM TableA WHERE BINARY columnA = 'aaa';

方法 2:修改欄位 COLLATE 為 utf8_bin

ALTER TABLE TableName 
MODIFY COLUMN ColumnName VARCHAR(50) 
BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

方案二:建表時指定 / 查詢時 BINARY 關鍵字

查詢時加 BINARY

SELECT * FROM some_table WHERE BINARY str = 'abc';
SELECT * FROM some_table WHERE BINARY str = 'ABC'; -- 結果不同

建表時指定 BINARY 屬性

CREATE TABLE some_table (
    str CHAR(20) BINARY
);

原理

CHAR/VARCHAR/TEXT 加上 BINARY 屬性 → 採用該字元集的 二進位校對規則 → 排序與比較基於 **數值字元碼** → 自然區分大小寫。

選擇建議

場景推薦方式
偶爾需要區分大小寫查詢查詢加 BINARY() 或 BINARY 關鍵字
該欄位業務本質區分大小寫(如密碼、代碼)建表/修改欄位指定 COLLATE utf8_bin
整個資料庫/表預設區分大小寫建庫/建表指定 DEFAULT COLLATE utf8_bin

MySQL 8.0+ 預設 utf8mb4_0900_ai_ci(不區分大小寫、重音不敏感),若需區分請顯式指定 _cs 或 _bin。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved