mysql數據庫在做查詢時候,有時候是英文字母大小寫敏感的,有時候又不是的,主要是由mysql的字符校驗規則的設置決定的,通常默認是不支持的大小寫字母敏感的。
1. 什么是字符集和校驗規則?
字符集是一套符號和編碼。校對規則是在字符集內用于比較字符的一套規則。任何一個給定的字符集至少有一個校對規則,它可能有幾個校對規則。要想列出一個字符集的校對規則,使用SHOW COLLATION語句。

校對規則一般有這些特征:
兩個不同的字符集不能有相同的校對規則。
每個字符集有一個默認校對規則。例如,utf8默認校對規則是utf8_general_ci。
存在校對規則命名約定:它們以其相關的字符集名開始,通常包括一個語言名,并且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束。
2. 不同級別的字符集和校驗規則可控制大小寫敏感
MySQL5.1在同一臺服務器、同一個數據庫或甚至在同一個表中使用不同字符集或校對規則來混合定義字符串。字符集和校對規則有4個級別的默認設置:服務器級、數據庫級、表級和連接級。
2.1服務器級
MySQL按照如下方法確定服務器字符集和服務器校對規則:
(1)修改配置文件/etc/my.cnf
在[mysqld]下添加:collation_server = utf8_bin
重啟實例

更改服務器級的校驗規則(collation_server )后,數據庫校驗規則(collation_collation)默認會繼承服務器級的。
注意:
這個只適用于在重新啟動之后, 新建的庫,已存在的庫不受影響.
同樣的, 即使庫的校驗規則改了,已經存在的表不受修改影響;
同理與已經存在的列...
| mysql> create database yutest0;Query OK, 1 row affected (0.00 sec)mysql> use yutest0;Database changedmysql> create table t1 (name varchar(10));Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values('AAA');Query OK, 1 row affected (0.00 sec)mysql> insert into t1 values('aaa');Query OK, 1 row affected (0.01 sec)mysql> select * from t1;+------+| name |+------+| AAA || aaa |+------+2 rows in set (0.00 sec)mysql> select * from t1 where name='aaa';+------+| name |+------+| aaa |+------+1 row in set (0.00 sec) |
可以看出,在服務器級進行相應的校對規則設置,查詢大小寫敏感。
(2)當服務器啟動時根據有效的選項設置
當啟動mysqld時,根據使用的初始選項設置來確定服務器字符集和校對規則。
新聞熱點
疑難解答