溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中大小寫問題

發(fā)布時間:2020-08-11 00:58:47 來源:ITPUB博客 閱讀:257 作者:dbasdk 欄目:MySQL數(shù)據(jù)庫

MySQL中大小寫問題


1.MySQL大小寫敏感規(guī)則


MySQL中,一個庫會對應(yīng)一個文件夾,庫里的表會則以文件的方式存放在文件夾內(nèi),所以,操作系統(tǒng)對大小寫的敏感性決定了數(shù)據(jù)庫和表的大小寫敏感(MySQL有一個只讀的系統(tǒng)變量lower_case_file_system,其值反映的正是當(dāng)前文件系統(tǒng)是否區(qū)分大小寫)因此:在Windows下Mysql的數(shù)據(jù)庫和表名是大小寫不敏感的,而在大多數(shù)類型的Unix系統(tǒng)中是大小寫敏感的。


以下是MySQL詳細(xì)的大小寫區(qū)分規(guī)則:

在Linux下:

1、數(shù)據(jù)庫名與表名是嚴(yán)格區(qū)分大小寫的;
2、表的別名是嚴(yán)格區(qū)分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變量名也是嚴(yán)格區(qū)分大小寫的; 

在Windows下:

全部不區(qū)分大小寫


補充:

1.MySQL中有一個系統(tǒng)變量:lower_case_table_names,專門用來配置是否區(qū)分據(jù)庫名與表名的大小寫。 如果你的系統(tǒng)是Windows,而你又希望mysql能夠區(qū)分大小寫,那么你可以在my.ini文件中,在[mysqld]一節(jié)的最后,加入如下部分:

[plain] view plain copy
  1. #If set to 0, table names are stored as specified and comparisons are case sensitive.   
  2. #If set to 1, table names are stored in lowercase on disk and comparisons are not case sensitive.   
  3. #If set to 2, table names are stored as given but compared in lowercase. This option also applies to database names and table aliases.  
  4. lower_case_table_names=0  



2.MySQL在查詢字符串時是大小寫不敏感的。如某字段值需要區(qū)分大小寫,可在定義該字段時指定BINARY屬性。


2.一種MySQL命名規(guī)范

為了避免大小寫引發(fā)的問題,一種推薦的命名規(guī)則是:在定義數(shù)據(jù)庫、表、列的時候全部采用小寫字母加下劃線的方式,不使用任何大寫字母。


3.關(guān)于Hibernate/JPA數(shù)據(jù)庫schema自動映射的問題

使用Hibernate/JPA的工程可以自動生成數(shù)據(jù)庫的schema,由于java有著自己的類與字段命名規(guī)則,這與mysql推薦的命名規(guī)則不太相符,于是出現(xiàn)了follow哪一種命名規(guī)范的問題。一般來說這會由團隊和DBA協(xié)商確定,使用mysql的命名規(guī)范不會出現(xiàn)大小寫帶來的問題,對于DBA來說可能也更加友好,而使用java的命名規(guī)范則對開發(fā)人員來說無疑是更加友好的,這將省去列名的映射配置,同時也方便開發(fā)人員查看數(shù)據(jù)庫。如果你的項目使用了后者,你最好像上面講到的,設(shè)置一下lower_case_table_names=0


MySQL語句中字母大小寫規(guī)則隨著語句元素的不同而變化,同時還要取決于MySQL服務(wù)器主機上的操作系統(tǒng)。

SQL關(guān)鍵字與函數(shù)名

關(guān)鍵字和函數(shù)名不區(qū)分字母的大小寫。如、abs、bin、now、version、floor等函數(shù)、SELECT、WHERE、ORDER、GROUP BY等關(guān)鍵字。 
MySQL中大小寫問題

數(shù)據(jù)庫、數(shù)據(jù)表和視圖的名字

在服務(wù)器主機上,MySQL數(shù)據(jù)庫和數(shù)據(jù)表用底層文件系統(tǒng)中的目錄和文件表示。因此數(shù)據(jù)庫和數(shù)據(jù)表名字的默認(rèn)字母大小寫情況取決于服務(wù)器主機上的操作系統(tǒng)在文件名方面的規(guī)定。Windows文件名不區(qū)分字母的大小寫,所以運行在windows主機上的MySQL服務(wù)器就不區(qū)分?jǐn)?shù)據(jù)庫和數(shù)據(jù)表名字的字母大小寫。運行在Unix\Linux主機上的MySQL服務(wù)器區(qū)分?jǐn)?shù)據(jù)庫和數(shù)據(jù)表名字的大小寫。 
MySQL中使用一個文件來表示一個試圖,所以視圖也符合上述規(guī)則。

存儲程序的名字

存儲函數(shù)、存儲過程、事件的名字不區(qū)分字母的大小寫。觸發(fā)器的名字要區(qū)分字母的大小寫。

數(shù)據(jù)列和索引的名字

數(shù)據(jù)列和索引的名字在MySQL環(huán)境里不區(qū)分字母的大小寫。實例如下: 
MySQL中大小寫問題




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

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

insert into t values('a'); 

當(dāng)?shù)诙l執(zhí)行的時候,如果是主鍵或者有唯一性約束的話,會發(fā)生

Sql代碼 
Duplicate entry for XXX 

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

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

insert into t values('y'); 

也會發(fā)生插入錯誤。

在查詢的時候也會出現(xiàn)這樣的問題

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

/* 下面的查詢結(jié)果也是一樣 */ 
select * from t where a = 'y'; 
select * from t where a = ''~; 

1.問題產(chǎn)生的原因

MySQL在Linux下數(shù)據(jù)庫名、表名、列名、別名大小寫規(guī)則是這樣的:

1、數(shù)據(jù)庫名與表名是嚴(yán)格區(qū)分大小寫的;
2、表的別名是嚴(yán)格區(qū)分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變量名也是嚴(yán)格區(qū)分大小寫的;

MySQL在Windows下都不區(qū)分大小寫。

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


2.解決辦法

A.表名區(qū)分大小寫

在my.conf加入:
ower_case_table_names = 0
其中 0:區(qū)分大小寫,1:不區(qū)分大小寫

B.插入查詢時區(qū)分大小寫

字段值需要設(shè)置BINARY屬性,即可區(qū)分大小寫。

設(shè)置的方法有多種:
創(chuàng)建時設(shè)置: 
CREATE TABLE T( 
A VARCHAR(10) BINARY 
);

使用alter修改: 
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;

mysql table editor中直接勾選BINARY項。


MySQL字符串大小寫問題的5種解決方法


MySQL字符串大小寫經(jīng)常會讓我們在注冊網(wǎng)站時受困了注冊名的大小寫,出現(xiàn)這個問題的原因是:MySQL在查詢字符串時是大小寫不敏感的,在編繹MySQL時一般以ISO-8859字符集作為默認(rèn)的字符集,這個字符集對MySQL字符串大小寫不敏感,因此在比較過程中中文編碼字符大小寫轉(zhuǎn)換造成了這種MySQL字符串大小寫的問題。


方法一:

解決方法是對于包含中文的字段加上"binary"屬性,使之作為二進制比較,例如將"name char(10)"改成"name char(10)binary"。

方法二:

如果你使用源碼編譯MySQL,可以編譯MySQL時使用--with--charset=gbk 參數(shù),這樣MySQL就會直接支持中文查找和排序了。

方法三:

可以使用 Mysql 的 locate 函數(shù)來判斷。以上述問題為例,使用方法為:
SELECT * FROM table WHERE locate(field,'李') > 0;

方法四:
把您的Select語句改成這樣,SELECT * FROM TABLE WHERE FIELDS LIKE BINARY '%FIND%'即可!

方法五:
如果你在Windows下使用已經(jīng)編譯好的MySQL,可以修改My.ini中的字符集選項。
default-character-set = gb2312

如果是自己的服務(wù)器使用win系統(tǒng),方法五是最好的方法!如果是linux系統(tǒng),可以使用方法二!如果不是自己的機子,可以使用方法一,這樣你的用戶名是嚴(yán)格區(qū)分大小寫的!






About Me

.............................................................................................................................................

● 本文整理自網(wǎng)絡(luò)

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、博客園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗云盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 數(shù)據(jù)庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.............................................................................................................................................

● QQ群:230161599     微信群:私聊

● 聯(lián)系我請加QQ好友(646634621),注明添加緣由

● 于 2017-07-01 09:00 ~ 2017-07-31 22:00 在魔都完成

● 文章內(nèi)容來源于小麥苗的學(xué)習(xí)筆記,部分整理自網(wǎng)絡(luò),若有侵權(quán)或不當(dāng)之處還請諒解

● 版權(quán)所有,歡迎分享本文,轉(zhuǎn)載請保留出處

.............................................................................................................................................

小麥苗的微店:https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的數(shù)據(jù)庫類叢書:http://blog.itpub.net/26736162/viewspace-2142121/

.............................................................................................................................................

使用微信客戶端掃描下面的二維碼來關(guān)注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學(xué)習(xí)最實用的數(shù)據(jù)庫技術(shù)。

MySQL中大小寫問題MySQL中大小寫問題MySQL中大小寫問題

   小麥苗的微信公眾號          小麥苗的QQ群             小麥苗的微店

.............................................................................................................................................

MySQL中大小寫問題
MySQL中大小寫問題
MySQL中大小寫問題



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI