大家在使用mysql過程中,可能會遇到類似一下的問題:
root@chuck 07:42:00>select * from test where c1 like 'ab%';
+-----+
| c1 |
+-----+
| abc |
| abd |
+-----+
模糊匹配 ab%,結果以ab開頭的字串也出現在結果集中,大家很自然的認為是大小寫敏感的問題。那麼mysql中大小寫敏感是如何控制的;資料庫名,表名,欄位名這些字典物件以及字段值的大小敏感是如何控制的;以及校驗規則與索引的關係,這是本文要討論的內容。
mysql中控制資料庫名和表名的大小寫敏感由引數lower_case_table_names控制,為0時表示區分大小寫,為1時,表示將名字轉化為小寫後儲存,不區分大小寫。欄位名通常都是不區分大小寫的,字段值呢?字段值的大小寫由mysql的校對規則來控制。提到校對規則,就不得不說字符集。字符集是一套符號和編碼,校對規則是在字符集內用於比較字元的一套規則,比如定義'a'<'b'這樣的關係的規則。不同的字符集有多種校對規則,一般而言,校對規則以其相關的字符集名開始,通常包括乙個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束 。比如 utf8字符集,utf8_general_ci,表示不區分大小寫,這個是utf8字符集預設的校對規則;utf8_general_cs表示區分大小寫,utf8_bin表示二進位制比較,同樣也區分大小寫。
校對規則通過關鍵字collate指定,比如建立資料庫d1,指定字符集為utf8,校對規則為utf8_bin
create database d1 default character set utf8 collate utf8_bin;
通過上述語句說明資料庫d1中的資料按utf8編碼,並且是對大小寫敏感的。有時候我們建庫時,沒有指定校對規則校對時字元大小寫敏感,但是我們查詢時,又需要對字元比較大小寫敏感,就比如開篇中的例子,只想要ab打頭的字串。沒關係,mysql提供了collate語法,通過指定utf8_bin校對規則即可。
root@chuck 08:19:35>select * from test where c1 like 'ab%' collate utf8_bin;
+-----+
| c1 |
+-----+
| abc|
+-----+
這裡還有另外一種方法,通過binary關鍵字,將串轉為二進位制進行比較,由於大小寫字元的二進位制肯定不同,因此可以認為是區分大小的一種方式。
root@chuck 07:50:35>select * from test where binary c1 like 'ab%';
+-----+
| c1 |
+-----+
| abc |
+-----+
最後要說明一點的是校對規則與索引儲存的關係。因為校對規則會用於字串之間比較,而索引是基於比較有序排列的,因此校對規則會影響記錄的索引順序。下面舉乙個小例子說明:1建表
create table test(c1 varchar(100), primary key(c1));
create table test2(c1 varchar(100), primary key(c1)) collate utf8_bin;
2初始化資料
insert into test(c1) values('abc');
insert into test(c1) values('abd');
insert into test(c1) values('zbc');3查詢
select * from test;
select * from test2;4返回
結果集| abc |
| abd |
| zbc |
| abd |
| zbc |
| abc |
表1從表1可以看到test和test2返回的結果集中,記錄的相對順序是不同的,因為是全表掃瞄,返回的記錄體現了主鍵順序。由於test表校驗規則採用預設的utf8_general_ci,大小寫不敏感,因此abc mysql大小寫敏感的解決方案 注 關於lower case table names引數對錶名稱或資料庫名稱大小寫敏感的控制。unix下預設為0,也就是大小寫敏感的 windows下預設為1,不敏感 macos預設為2,儲存區分大小寫,但是在查詢時會轉換為小寫。對於在大小寫不敏感的系統 window... linux下mysql預設區分大小寫 windows下mysql預設不區分大小寫 檢視是否區分大小寫 lower case table names引數詳解 lower case table names 0 其中 0 區分大小寫,1 不區分大小寫 mysql在linux下資料庫名 表名 列名 別名大小... 一直覺得php中各種大小寫規則理不清,就連工作多年的老手們也不一定能對php大小寫敏感問題足夠了解。在php中,大小寫敏感問題的處理比較亂,大家一定要注意。即使某些地方大小寫不敏感,但在程式設計過程中能始終堅持 大小寫敏感 是最好不過的。下面整理了一些大小寫問題注意點 大小寫敏感 1.變數名區分大小...MySQL大小寫敏感
mysql 區分大小寫 大小寫敏感 配置
PHP命名大小寫敏感規則