MySQL的大小寫問題

來源:互聯網
上載者:User

標籤:

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項。

MySQL的大小寫問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.