解決MySQl查詢不區(qū)分大小寫(xiě)的方法講解

問(wèn)題

創(chuàng)新互聯(lián),專注為中小企業(yè)提供官網(wǎng)建設(shè)、營(yíng)銷型網(wǎng)站制作、成都響應(yīng)式網(wǎng)站建設(shè)、展示型網(wǎng)站制作、成都網(wǎng)站制作等服務(wù),幫助中小企業(yè)通過(guò)網(wǎng)站體現(xiàn)價(jià)值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷推廣問(wèn)題。

最近,在用SSH框架完成一個(gè)實(shí)踐項(xiàng)目時(shí),碰到了一個(gè)莫名其妙的Bug困擾了我好久,最后終于解決,記錄如下。

問(wèn)題:同學(xué)在測(cè)試系統(tǒng)的時(shí)候突然發(fā)現(xiàn),數(shù)據(jù)庫(kù)保存的賬戶本來(lái)應(yīng)該是admin,結(jié)果該同學(xué)用Admin賬戶居然登錄成功了……

……EXM???這樣也行?好吧,我還是查找這個(gè)Bug發(fā)生的原因吧。然后就是各種排查程序的過(guò)程,找來(lái)找去也沒(méi)發(fā)現(xiàn)什么問(wèn)題。終于想到,不用hql,自己寫(xiě)sql語(yǔ)句在數(shù)據(jù)庫(kù)里面直接查詢?cè)囋?,結(jié)果果然發(fā)現(xiàn)了問(wèn)題所在:

select * from user where username = 'admin' and password = 'admin';
select * from user where username = 'Admin' and password = 'admin';

用上面的兩條sql語(yǔ)句分表查詢,出來(lái)的結(jié)果居然是一樣的!……?。∪ニ阉饕嫠阉麝P(guān)鍵詞:MySQL 查詢 大小寫(xiě),果然找到問(wèn)題了!MySQL查詢是不區(qū)分大小寫(xiě)的!這可真的是驚呆我了,雖然知道一般情況下,關(guān)鍵字是不區(qū)分大小寫(xiě)的,但是沒(méi)想到連要查詢的參數(shù)都是不區(qū)分大小寫(xiě)的??!再嘗試下面的sql語(yǔ)句,果然還是一樣的結(jié)果。

select * from user where username = 'ADMIN' and password = 'admin';

解決方案

網(wǎng)上搜索到一篇相關(guān)的文章,寫(xiě)的挺好的,這里直接貼上該文章解釋吧:

Mysql默認(rèn)的字符檢索策略:utf8_general_ci,表示不區(qū)分大小寫(xiě);utf8_general_cs表示區(qū)分大小寫(xiě),utf8_bin表示二進(jìn)制比較,同樣也區(qū)分大小寫(xiě) 。(注意:在Mysql5.6.10版本中,不支持utf8_genral_cs?。。。。?/p>

創(chuàng)建表時(shí),直接設(shè)置表的collate屬性為utf8_general_cs或者utf8_bin;如果已經(jīng)創(chuàng)建表,則直接修改字段的Collation屬性為utf8_general_cs或者utf8_bin。

-- 創(chuàng)建表:
CREATE TABLE testt(
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL
) ENGINE = INNODB COLLATE =utf8_bin;
-- 修改表結(jié)構(gòu)的Collation屬性
ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

直接修改sql語(yǔ)句,在要查詢的字段前面加上binary關(guān)鍵字即可。

-- 在每一個(gè)條件前加上binary關(guān)鍵字
select * from user where binary username = 'admin' and binary password = 'admin';
-- 將參數(shù)以binary('')包圍
select * from user where username like binary('admin') and password like binary('admin');

注意:在我的這次項(xiàng)目中用的是hibernate框架,使用的并不是sql,而是hql語(yǔ)句,使用 from User where binary username = ? and binary password = ?;結(jié)果報(bào)錯(cuò),再試 from User where username like binary(?) and password like binary(?);才沒(méi)有報(bào)錯(cuò)。原因暫時(shí)不知。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接

當(dāng)前名稱:解決MySQl查詢不區(qū)分大小寫(xiě)的方法講解
分享路徑:http://muchs.cn/article42/pisohc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、自適應(yīng)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)全網(wǎng)營(yíng)銷推廣、外貿(mào)建站、網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化