解決MySQl查詢不區分大小寫

2021-08-03 01:18:58 字數 1856 閱讀 6365

最近,在用ssh框架完成乙個實踐專案時,碰到了乙個莫名其妙的bug困擾了我好久,最後終於解決,記錄如下。

問題:同學在測試系統的時候突然發現,資料庫儲存的賬戶本來應該是admin,結果該同學用admin賬戶居然登入成功了……

……exm???這樣也行?好吧,我還是查詢這個bug發生的原因吧。然後就是各種排查程式的過程,找來找去也沒發現什麼問題。終於想到,不用hql,自己寫sql語句在資料庫裡面直接查詢試試,結果果然發現了問題所在:

select * from

user

where username = 'admin'

and password = 'admin';

select * from

user

where username = 'admin'

and password = 'admin';

select * from

user

where username = 'admin'

and password = 'admin';

mysql預設的字元檢索策略:utf8_general_ci,表示不區分大小寫;utf8_general_cs表示區分大小寫,utf8_bin表示二進位制比較,同樣也區分大小寫 。(注意:在mysql5.6.10版本中,不支援utf8_genral_cs!!!!)

建立表時,直接設定表的collate屬性為utf8_general_cs或者utf8_bin;如果已經建立表,則直接修改欄位的collation屬性為utf8_general_cs或者utf8_bin。

-- 建立表:

create

table testt(

id int

primary

key,

name varchar(32) not

null

) engine = innodb collate =utf8_bin;

-- 修改表結構的collation屬性

alter

table tablename modify column columnname varchar(50) binary character

set utf8 collate utf8_bin default

null;

直接修改sql語句,在要查詢的字段前面加上binary關鍵字即可。

-- 在每乙個條件前加上binary關鍵字

select * from

user

where binary username = 'admin'

and binary password = 'admin';

-- 將引數以binary('')包圍

select * from

user

where username like binary('admin') and password like binary('admin');

> 部分引用自文章:
注意:在我的這次專案中用的是hibernate框架,使用的並不是sql,而是hql語句,使用from user where binary username = ? and binary password = ?;結果報錯,再試from user where username like binary(?) and password like binary(?);才沒有報錯。原因暫時不知。

解決MySQL查詢不區分大小寫

今天遇到乙個情況,查詢資料時查詢條件輸入不管大小寫,都能查到同樣的資料。比如 輸入 aaa 或者aaa aaa都能查詢同樣的結果,說明查詢條件是大小寫不敏感的。因為程式使用了hibernate框架訪問mysql 資料庫。一開始以為是hibernate的問題。最跟蹤了一下hibernate 沒有看到轉...

解決MySQL查詢不區分大小寫

今天遇到乙個情況,查詢資料時查詢條件輸入不管大小寫,都能查到同樣的資料。比如 輸入 aaa 或者aaa aaa都能查詢同樣的結果,說明查詢條件是大小寫不敏感的。因為程式使用了hibernate框架訪問mysql資料庫。一開始以為是hibernate的問題。最跟蹤了一下hibernate 沒有看到轉換...

mysql查詢不區分大小寫

摘自 當我們輸入不管大小寫都能查詢到資料,例如 輸入 aaa 或者aaa aaa都能查詢同樣的結果,說明查詢條件對大小寫不敏感。解決方案一 於是懷疑mysql的問題。做個實驗 直接使用客戶端用sql查詢資料庫。發現的確是大小不敏感 通過查詢資料發現需要設定collate 校對 collate規則 b...