有時在使用mysql時字串的查詢條件不管大小寫都能查詢到資料,例如:輸入 aaa 或者aaa ,aaa都能查詢同樣的結果,說明查詢條件對大小寫不敏感。
大小寫不敏感的根源在於字符集所使用的校對規則有關
1、檢視mysql所有可用的字符集的命令是
字符集是用來定義 mysql 儲存字串的方式,校對規則則是定義了比較字串的方式。字符集和校對規則是一對多的關係,mysql 支援 30 多種字符集的 70 多種校對規則。
校對規則命名約定:它們以其相關的字符集名開始,通常包括乙個語言名,並且以_ci(case insensitive collation,不區分大小寫)、_cs(case sensitive collation,區分大小寫)或_bin(binary case sensitive collation,也就是說是區分大小寫的,二元,即比較是基於字元編碼的值而與language無關)結束。
2、伺服器的字符集和校對規則
可以看到當前伺服器使用的字符集時utf8,該字符集對應的校對規則時utf8_general_ci,不區分大小寫的。
3、資料庫的字符集和校對規則
資料庫的字符集和校對規則在建立資料庫的時候指定,也可以在建立完資料庫後通過「alter database」命令進行修改。需要注意的是,如果資料庫裡已經存在資料,因為修改字符集並不能將已有的資料按照新的字符集進行存放,所以不能通過修改資料庫的字符集直接修改資料的內容。
設定資料庫字符集的規則是:
推薦在建立資料庫的時候明確指定字符集和校對規則,避免受到預設值的影響。
當前資料庫的字符集和校對規則,可以使用 「 show variables like 'character_set_database '」和「show variables like ' collation_database '」命令
4、表字符集和校對規則
表的字符集和校對規則在建立表的時候指定,可以通過 alter table 命令進行修改,同樣,如果表中已有記錄,修改字符集對原有的記錄並沒有影響,不會按照新的字符集進行存放。表的字段仍然使用原來的字符集。
設定表的字符集的規則和上面基本類似:
推薦在建立表的時候明確指定字符集和校對規則,避免受到預設值的影響。
檢視表的字符集和校對規則,可以使用 show create table 命令
根據上面講解的字符集和校對規則可知,查詢時不區分大小寫時由於設定的校對規則大小寫不敏感導致的。
方法1、使用binary使大小寫區分
select這樣得到的查詢結果就大小寫敏感查詢了。*from some_table where
binary
str=
'abc
'select
*from some_table where
binary
str=
'abc
'
同理
select方法2、建表時指定區分大小寫的校對規則distinct(binary name) as name from x;
解決MySQL查詢不區分大小寫
今天遇到乙個情況,查詢資料時查詢條件輸入不管大小寫,都能查到同樣的資料。比如 輸入 aaa 或者aaa aaa都能查詢同樣的結果,說明查詢條件是大小寫不敏感的。因為程式使用了hibernate框架訪問mysql 資料庫。一開始以為是hibernate的問題。最跟蹤了一下hibernate 沒有看到轉...
解決MySQl查詢不區分大小寫
最近,在用ssh框架完成乙個實踐專案時,碰到了乙個莫名其妙的bug困擾了我好久,最後終於解決,記錄如下。問題 同學在測試系統的時候突然發現,資料庫儲存的賬戶本來應該是admin,結果該同學用admin賬戶居然登入成功了 exm?這樣也行?好吧,我還是查詢這個bug發生的原因吧。然後就是各種排查程式的...
解決MySQL查詢不區分大小寫
今天遇到乙個情況,查詢資料時查詢條件輸入不管大小寫,都能查到同樣的資料。比如 輸入 aaa 或者aaa aaa都能查詢同樣的結果,說明查詢條件是大小寫不敏感的。因為程式使用了hibernate框架訪問mysql資料庫。一開始以為是hibernate的問題。最跟蹤了一下hibernate 沒有看到轉換...