mysql 查詢條件不區分大小寫問題


轉自 http://blog.csdn.net/qishuo_java/article/details/40118937

轉自 https://www.cnblogs.com/wuyun-blog/p/8527492.html

找出用戶名id為’AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h‘的用戶的數據: select * from usertable where id = 'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'; 結果出現兩條記錄。這就奇怪了,id已經設置為主鍵,怎么會重復呢?難道是mysql的漏洞。后來發現原來查詢出來的兩個id的值是不同的,詐一看沒什么區別,仔細看你會發現這兩個id只是有一個字母的大小寫不同, 這兩個id分別為:

'AAMkADExM2M5NjQ2LWUzYzctNdFkMC1h',

'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'.

       原來mysql查詢時,存在不區分大小寫的情況。可以通過binary關鍵字加以解決。

       解決方法有兩種:

      第一種:讓mysql查詢時區分大小寫

       select * from usertable where binary id = 'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h';

       第二種:在建表時加以標識

        create table table_name {

                   id varchar(32) binary;

        }

在mysql中,存在大小寫問題的地方還有:

(1)  關鍵字: 不區分大小寫    select * fRom table_name 和 select * from table_name 效果是一樣的

(2) 標示符(如數據庫名稱和表名稱):不區分大小寫。如存在表users,那么select  *  from users和select *  from uSers 效果一樣。網上說這跟操作系統有關,在所有Unit操作系統(除了使用HFS+的Mac OS 之外)上都是區分大小寫的,而在windows上是不區分大小寫的。(網上的這一說法沒有驗證過,我在windows server2003上是不區分大小寫的)

(3) 表的別名:不區分大小寫  select m.* from users m where M.username = 'aa';

(4) 列的別名:不區分大小寫  select uName from (select username as uname from users where id = 768) t


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM