程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> 更多數據庫知識 >> MySQL查詢不區分大小寫問題

MySQL查詢不區分大小寫問題

編輯:更多數據庫知識

問題描述:

找出用戶名id為’AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h‘的用戶的數據:
select * from usertable where id = 'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h';
結果出現兩條記錄。

這就奇怪了,id已經設置為主鍵,怎麼會重復呢?難道是mysql的漏洞。

後來發現原來查詢出來的兩個id的值是不同的,詐一看沒什麼區別,仔細看你會發現這兩個id只是有一個字母的大小寫不同, 這兩個id分別為:

'AAMkADExM2M5NjQ2LWUzYzctNdFkMC1h',

'AAMkADExM2M5NjQ2LWUzYzctNDFkMC1h'.

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

解決方法有兩種:

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

create table table_name {

  id varchar(32) binary;

}

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

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

在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)

*
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved