本篇重點
- 不同
collation對查詢的影響 - 如何確認欄位
collation - 設定
collation的方法 - 查詢時強制區分大小寫
操作 MySQL 查詢時,有時候會發現輸入的條件大小寫不同卻能查到相同的結果,例如 WHERE name = 'Tom' 與 WHERE name = 'tom' 回傳的內容一樣。這並不是 MySQL 的「錯誤」,而是因為欄位的 collation 可能被設定為大小寫不敏感 (case-insensitive),導致查詢忽略了大小寫差異。
不同 Collation 對查詢的影響
MySQL 中,collation (編碼、排序規則) 影響字串的比較與排序方式,以下是 collation 的重要特性:
是否區分大小寫 (case sensitivity)、是否區分重音 (accent sensitivity)
ci→ case-insensitive (不區分大小寫),查詢時Tom與tom視為相同bin→ binary (以二進位比較,嚴格區分內容),查詢時Tom與tom或是Eric與Éric會被視為不同
語言排序規則
utf8mb4_general_ci→ 簡單快速,但會犧牲部分語言正確性utf8mb4_unicode_ci→ 依 Unicode 規範排序,更精準,適合多語言
範例:
不同的 collation 得到不同的結果
1 | -- utf8mb4_general_ci 大小寫不敏感 |
如何確認欄位 Collation
透過指令檢查欄位的 collation
1 | -- 查看資料表欄位的 collation |
設定 Collation
哪些欄位需要大小寫敏感?
不區分大小寫 (使用 ci)
- 一般文字內容(標題、文章、備註)
- 使用者暱稱、搜尋功能中的關鍵字
- 多語言資料
區分大小寫 (使用 cs 或 bin)
- 使用者帳號
- 密碼欄位
- Token、驗證碼、序號等需嚴格比對的字串
建立欄位或資料表
建立整張資料表指定 Collation
1 | CREATE TABLE customers ( |
新增欄位指定 Collation
1 | ALTER TABLE customers |
CHARACTER SET與COLLATE要一起指定
修改欄位或資料表
修改整張資料表指定 Collation
1 | ALTER TABLE customers |
- 修改資料表所有文字欄位(
VARCHAR、TEXT等)的 Character Set 與 Collation
修改欄位指定 Collation
1 | ALTER TABLE customers |
查詢時強制區分大小寫
1 | SELECT * FROM customers |
結論
MySQL 查詢是否區分大小寫,取決於 collation 的設定。
ci適合大部分一般文字內容bin或cs適合帳號、密碼、Token 等需嚴格比對的欄位
不用每個欄位都個別設定,建議在資料庫層級先指定一個通用的 collation,再針對需要區分大小寫的欄位額外調整。



