MySQL和Oracle數據庫的大小寫問題

一、MySQL

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

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

MySQL在Windows下都不區分大小寫。

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

【案例】

(1)問題描述

如下面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 = ''~; 

(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

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

1、不區分大小寫

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

`select` `* ``from` `emp;``SELECT` `* ``FROM` `EMP;`
2、區分大小寫

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

`select` `* ``from` `emp ``where` `ename=``'SMITH'``;`

這樣是有結果的,如圖:

[外鏈圖片轉存失敗(img-0VTwv8AP-1566980649536)(C:\Users\zhangzhenquan\AppData\Roaming\Typora\typora-user-images\1566980168807.png)]

select * from emp where ename='smith';
這樣則查詢不出結果:

[外鏈圖片轉存失敗(img-rLfW0QSw-1566980649536)(C:\Users\zhangzhenquan\AppData\Roaming\Typora\typora-user-images\1566980223575.png)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章