轉自 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