MySQL的where條件字串區分大小寫的問題

码农骆驼發表於2024-10-29

https://blog.csdn.net/qq_45783259/article/details/132231226

MySQL的where條件字串區分大小寫的問題
在MySQL的預設情況下字符集採用的是utf8mb4,排序規則是utf8mb4_general_ci,這種情況下where條件遇到字串是不區分大小寫的。

比如以下兩條SQL語句查詢出來的結果都是一樣的,即對大小寫不敏感:


透過查詢資料發現是所選用的collate(校對)導致的問題 ,也即選用的排序規則問題。 collate規則:

*_bin: 表示的是binary case sensitive collation,也就是說是區分大小寫的
*_cs: case sensitive collation,區分大小寫
*_ci: case insensitive collation,不區分大小寫

在MySQL中排序規則(collation)決定了如何對字串進行比較和排序

解決方法
方法一:使用BINARY關鍵字
在MySQL中,BINARY關鍵字,用於宣告一個列為二進位制字串型別。它可以用於建立表時指定列的資料型別,或者查詢時限制列的比較方式。它可以確保在比較時將列視為二進位制字串,而不是根據字符集進行比較。

因此可以在建表時將列設定為BINARY

CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) BINARY DEFAULT NULL,

)
1
2
3
4
5
或更新該欄位為BINARY:

alter table sys_user modify username varchar(50) binary;
1
也可以不改變原有表結構,而是改SQL,在查詢欄位前加上 binary 關鍵字

select * from sys_user where BINARY username = 'Admin'
1
方法二:修改欄位的的排序規則
utf8mb4字符集的預設排序規則是utf8mb4_general_ci,該排序規則是不區分大小寫的,因此可以將欄位的排序規則更換為區分大小寫的排序規則utf8mb4_bin,如:

ALTER TABLE sys_user MODIFY username VARCHAR(50) COLLATE utf8mb4_bin;
1
MySQL中utf8mb4字符集的常見排序規則介紹
utf8mb4_general_ci:這是MySQL預設的排序規則。它是不區分大小寫的(例如,"a"和"A"被認為是相等的), 沒有實現Unicode排序規則,在遇到某些特殊語言或者字符集,排序結果可能不一致。
utf8mb4_bin:這是一種二進位制排序規則,它會按照字元的二進位制編碼進行排序。它是區分大小寫的。例如,"a"和"A"被認為是不相等的。
utf8mb4_unicode_ci:這是一種基於Unicode字符集的排序規則。它是不區分大小寫的。它支援多種語言和字符集,可以正確地處理各種語言的排序需求。
utf8mb4_unicode_520_ci:這是基於Unicode 5.2.0版本的排序規則。它是不區分大小寫的。它是utf8mb4_unicode_ci的一個子集,提供了更快的排序效能。
————————————————

版權宣告:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連結和本宣告。

原文連結:https://blog.csdn.net/qq_45783259/article/details/132231226

相關文章