mysql字符集和校對規則(Mysql校對集)

字符集的概念你們都清楚,校對規則不少人不瞭解,通常數據庫開發中也用不到這個概念,mysql在這方便貌似很先進,大概介紹一下
簡要說明 mysql

字符集和校對規則
字符集是一套符號和編碼。校對規則是在字符集內用於比較字符的一套規則。
MySql在collation提供較強的支持,oracel在這方面沒查到相應的資料。
不一樣字符集有不一樣的校對規則,命名約定:以其相關的字符集名開始,一般包括一個語言名,而且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束
校對規則通常分爲兩類:
binary collation,二元法,直接比較字符的編碼,能夠認爲是區分大小寫的,由於字符集中'A'和'a'的編碼顯然不一樣。
字符集_語言名,utf8默認校對規則是utf8_general_ci
mysql字符集和校對規則有4個級別的默認設置:服務器級、數據庫級、表級和鏈接級。
具體來講,咱們系統使用的是utf8字符集,若是使用utf8_bin校對規則執行sql查詢時區分大小寫,使用utf8_general_ci 不區分大小寫。不要使用utf8_unicode_ci。
如create database demo CHARACTER SET utf8; 默認校對規則是utf8_general_ci 。 sql

Unicode與UTF8
Unicode只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲.
UTF8字符集是存儲Unicode數據的一種可選方法。mysql同時支持另外一種實現ucs2。 數據庫

詳細說明 服務器

字符集(charset):是一套符號和編碼。
校對規則(collation):是在字符集內用於比較字符的一套規則,好比定義'A'<'B'這樣的關係的規則。不一樣collation能夠實現不一樣的比較規則,如'A'='a'在有的規則中成立,而有的不成立;進而說,就是有的規則區分大小寫,而有的無視。
每一個字符集有一個或多個校對規則,而且每一個校對規則只能屬於一個字符集。 函數

binary collation,二元法,直接比較字符的編碼,能夠認爲是區分大小寫的,由於字符集中'A'和'a'的編碼顯然不一樣。除此之外,還有更加複雜的比較規則,這些規則在簡單的二元法之上增長一些額外的規定,比較就更加複雜了。
mysql5.1在字符集和校對規則的使用比其它大多數數據庫管理系統超前許多,能夠在任何級別進行使用和設置,爲了有效地使用這些功能,你須要瞭解哪些字符集和 校對規則是可用的,怎樣改變默認值,以及它們怎樣影響字符操做符和字符串函數的行爲。 編碼

校對規則通常有這些特徵: code

兩個不一樣的字符集不能有相同的校對規則。
每一個字符集有一個默認校對規則。例如,utf8默認校對規則是utf8_general_ci。
存在校對規則命名約定:它們以其相關的字符集名開始,一般包括一個語言名,而且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束 blog


肯定默認字符集和校對
字符集和校對規則有4個級別的默認設置:服務器級、數據庫級、表級和鏈接級。
數據庫字符集和校對
每個數據庫有一個數據庫字符集和一個數據庫校對規則,它不可以爲空。CREATE DATABASE和ALTER DATABASE語句有一個可選的子句來指定數據庫字符集和校對規則:
例如:
CREATE DATABASE db_name DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
MySQL這樣選擇數據庫字符集和數據庫校對規則:
· 若是指定了CHARACTER SET X和COLLATE Y,那麼採用字符集X和校對規則Y。
· 若是指定了CHARACTER SET X而沒有指定COLLATE Y,那麼採用CHARACTER SET X和CHARACTER SET X的默認校對規則。
· 不然,採用服務器字符集和服務器校對規則。
在SQL語句中使用COLLATE
•使用COLLATE子句,可以爲一個比較覆蓋任何默認校對規則。COLLATE能夠用於多種SQL語句中。
使用WHERE:
select * from pro_product where product_code='ABcdefg' collate utf8_general_ci
Unicode與UTF8
Unicode只是一個符號集,它只規定了符號的二進制代碼,卻沒有規定這個二進制代碼應該如何存儲.Unicode碼能夠採用UCS-2格式直接存儲.mysql支持ucs2字符集。
UTF-8就是在互聯網上使用最廣的一種unicode的實現方式。其餘實現方式還包括UTF-16和UTF-32,不過在互聯網上基本不用。
UTF8字符集(轉換Unicode表示)是存儲Unicode數據的一種可選方法。它根據RFC 3629執行。UTF8字符集的思想是不一樣Unicode字符采用變長字節序列編碼:
· 基本拉丁字母、數字和標點符號使用一個字節。
· 大多數的歐洲和中東手寫字母適合兩個字節序列:擴展的拉丁字母(包括髮音符號、長音符號、重音符號、低音符號和其它音符)、西裏爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言。
· 韓語、中文和日本象形文字使用三個字節序列
摘自:用夢想丈量人生,用奔跑丈量激情 排序


校對集ci

MySQL5.5.8中共有字符集39,校對集195個

#顯示全部的校對集

Show collation

#顯示全部的字符集

show character set

因此一個字符集對應多個校對集,即一樣的一個字符集有多重排序規則

好比一個utf8的字符集共有22中排序規則

Utf8字符集默認的校對集爲utf8_general_ci

經過show collation like ‘utf8\_%'

便可查看

 

注意:

utf8_general_ci 按照普通的字母順序,並且不區分大小寫(好比:a B c D)

utf8_bin 按照二進制排序(好比:A排在a前面,B D a c)

相關文章
相關標籤/搜索