mysql大小寫問題

 MySQL的大小寫問題 不是一個很大的問題,但是如果不瞭解的話,卻會使用戶產生迷惑 ;如下面

 

Sql代碼  收藏代碼
  1. insert into t values('A');  
  2.   
  3. insert into t values('a');  

 

當第二條執行的時候,如果是主鍵或者有唯一性約束的話,會發生

 

Sql代碼  收藏代碼
  1. Duplicate entry for XXX  

 

更加迷惑的是下面的2條語句

 

Java代碼  收藏代碼
  1. insert into t values('~');  
  2.   
  3. insert into t values('y');  

 

也會發生插入錯誤。

 

在查詢的時候也會出現這樣的問題

 

Java代碼  收藏代碼
  1. /* 查詢的結果一眼 */  
  2. select * from t where a like 'a%'  
  3. select * from t where a like 'A%'  
  4.   
  5. /* 下面的查詢結果也是一樣 */  
  6. select * from t where a = 'y';  
  7. select * from t where a = ''~;  

 

1.問題產生的原因

 

MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的:


1、數據庫名與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變量名也是嚴格區分大小寫的;

 

MySQL在Windows下都不區分大小寫。
 
MySQL在查詢字符串時是大小寫不敏感的,在編繹MySQL時一般以ISO-8859字符集作爲默認的字符集,這個字符集對大小寫不敏感,因此在比較過程中中文編碼字符大小寫轉換造成了這種現象。

 

 

2.解決辦法

 

A.表名區分大小寫

 

在my.conf加入:

ower_case_table_names = 0
其中 0:區分大小寫,1:不區分大小寫

 

B.插入查詢時區分大小寫

 

字段值需要設置BINARY屬性,即可區分大小寫。

 

設置的方法有多種:

創建時設置: 
CREATE TABLE T( 
A VARCHAR(10) BINARY 
);

 

使用alter修改: 
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
 
mysql table editor中直接勾選BINARY項。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章