MySQL的校對規(guī)則,你必須要知道。
在 MySQL 中,可以使用 CREATE DATABASE 語句創(chuàng)建數(shù)據(jù)庫,語法格式如下:
CREATE DATABASE [IF NOT EXISTS] <數(shù)據(jù)庫名>[[DEFAULT] CHARACTER SET <字符集名>][[DEFAULT] COLLATE <校對規(guī)則名>];
MySQL 的字符集(CHARACTER)和校對規(guī)則(COLLATION)是兩個(gè)不同的概念。字符集是用來定義 MySQL 存儲(chǔ)字符串的方式,校對規(guī)則定義了比較字符串的方式。
也把校對規(guī)則稱為排序規(guī)則、或?qū)Ρ纫?guī)則。
二、COLLATE校對規(guī)則
對于MySQL中那些字符類型的列,如VARCHAR,CHAR,TEXT類型的列,都需要有一個(gè)COLLATE類型來告知MySQL如何對該列進(jìn)行排序和比較。
COLLATE會(huì)影響到ORDER BY語句的順序,會(huì)影響到WHERE條件中大于小于號篩選出來的結(jié)果,會(huì)影響DISTINCT、GROUP BY、HAVING語句的查詢結(jié)果。
另外,MySQL建索引的時(shí)候,如果索引列是字符類型,也會(huì)影響索引創(chuàng)建,總之,凡是涉及到字符類型比較或排序的地方,都會(huì)和COLLATE有關(guān)。
2.1 各種COLLATE的區(qū)別
COLLATE通常是和數(shù)據(jù)編碼(CHARSET)相關(guān)的,一般來說每種CHARSET都有多種它所支持的COLLATE,并且每種CHARSET都指定一種COLLATE為默認(rèn)值。例如Latin1編碼的默認(rèn)COLLATE為latin1_swedish_ci,GBK編碼的默認(rèn)COLLATE為gbk_chinese_ci,utf8mb4編碼的默認(rèn)值為utf8mb4_general_ci。
很多COLLATE都帶有_ci字樣,這是Case Insensitive的縮寫,即大小寫無關(guān),也就是說"A"和"a"在排序和比較的時(shí)候是一視同仁的。selection * from table1 where field1="a"同樣可以把field1為"A"的值選出來。與此同時(shí),對于那些_cs后綴的COLLATE,則是Case Sensitive,即大小寫敏感的。
2.2 查詢collation
在MySQL中使用show collation指令可以查看到MySQL所支持的所有COLLATE。以utf8和utf8mb4為例,該編碼所支持的所有COLLATE如下圖所示。
show collation;-- 只查詢utf8的collationshow collation like '%utf8%';

點(diǎn)“在看”變好看噢

