MYSQL和oracle 大小寫問題


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

Sql代碼
insert into t values('A');

insert into t values('a');

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

Sql代碼 
Duplicate entry for XXX

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

Java代碼 
insert into t values('~');

insert into t values('y');

也會發生插入錯誤。

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

Java代碼 
/* 查詢的結果一眼 */
select * from t where a like 'a%'
select * from t where a like 'A%'

/* 下面的查詢結果也是一樣 */
select * from t where a = 'y';
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項。

 

 

 

 

oracle中分為兩種情況,單純的sql語句不區分大小寫,但是如果查詢某個字符的話就需要區分大小寫。

1、如以下情況,是不區分大小寫的,查詢結果都是一致的:

select  from  emp;
SELECT  FROM  EMP;

2、如在emp表中查詢ename為“SMITH”(不含引號)的信息,就必須注意大小寫:

select  from  emp  where  ename= 'SMITH' ;

這樣是有結果的,如圖:

select  from  emp  where  ename= 'smith' ;

這樣則查詢不出結果:


免責聲明!

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



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