mysql校對規則

2021-07-26 14:54:37 字數 2930 閱讀 7064

字符集的概念大家都清楚,校對規則很多人不了解,一般資料庫開發中也用不到這個概念,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 。

unicode與utf8

unicode只是乙個符號集,它只規定了符號的二進位制**,卻沒有規定這個二進位制**應該如何儲存.

utf8字符集是儲存unicode資料的一種可選方法。mysql同時支援另一種實現ucs2。

詳細說明

字符集(charset):是一套符號和編碼。

校對規則(collation):是在字符集內用於比較字元的一套規則,比如定義'a'<'b'這樣的關係的規則。不同collation可以實現不同的比較規則,如'a'='a'在有的規則中成立,而有的不成立;進而說,就是有的規則區分大小寫,而有的無視。

每個字符集有乙個或多個校對規則,並且每個校對規則只能屬於乙個字符集。

binary collation,二元法,直接比較字元的編碼,可以認為是區分大小寫的,因為字符集中'a'和'a'的編碼顯然不同。除此以外,還有更加複雜的比較規則,這些規則在簡單的二元法之上增加一些額外的規定,比較就更加複雜了。

mysql5.1在字符集和校對規則的使用比其它大多數資料庫管理系統超前許多,可以在任何級別進行使用和設定,為了有效地使用這些功能,你需要了解哪些字符集和 校對規則是可用的,怎樣改變預設值,以及它們怎樣影響字元操作符和字串函式的行為。

校對規則一般有這些特徵:

兩個不同的字符集不能有相同的校對規則。

每個字符集有乙個預設校對規則。例如,utf8預設校對規則是utf8_general_ci。

存在校對規則命名約定:它們以其相關的字符集名開始,通常包括乙個語言名,並且以_ci(大小寫不敏感)、_cs(大小寫敏感)或_bin(二元)結束

確定預設字符集和校對

字符集和校對規則有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字元採用變長位元組序列編碼:

· 基本拉丁字母、數字和標點符號使用乙個位元組。

· 大多數的歐洲和中東手寫字母適合兩個位元組序列:擴充套件的拉丁字母(包括發音符號、長音符號、重音符號、低音符號和其它音符)、西里爾字母、希臘語、亞美尼亞語、希伯來語、阿拉伯語、敘利亞語和其它語言。

· 韓語、中文和日本象形文本使用三個位元組序列

摘自:用夢想丈量人生,用奔跑丈量激情

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

#顯示所有的校對集

show collation

#顯示所有的字符集

show character set

所以乙個字符集對應多個校對集,即同樣的乙個字符集有多重排序規則

比如乙個utf8的字符集共有22中排序規則

utf8字符集預設的校對集為utf8_general_ci

通過show collation like 『utf8\_%'

即可檢視

mysql校對規則

注意:utf8_general_ci  按照普通的字母順序,而且不區分大小寫(比如:a b c d)

utf8_bin   按照二進位制排序(比如:a排在a前面,b d a c)

mysql 校對規則 MySQL 校對規則

校對規則 在當前編碼下,字元之間的比較順序。cs大小寫敏感,ci大小寫不敏感,bin二進位制編碼比較 1.檢視當前校對規則 show collation 每個字符集都支援不定數量的校對規則,下圖為檢視結果的部分截圖 tip 以big5 chinese ci為例,其中big5表示字符集,ci表示校對規...

mysql校對規則 MySQL中的校對規則

詳解mysql中的校對規則 welcome to the mysql monitor.commands end with or g.your mysql connection id is 7 server version 5.6.14 mysql community server gpl oracl...

MySQL 校對規則

校對規則 在當前編碼下,字元之間的比較順序。cs大小寫敏感,ci大小寫不敏感,bin二進位制編碼比較 1.檢視當前校對規則 show collation 每個字符集都支援不定數量的校對規則,下圖為檢視結果的部分截圖 tip 以big5 chinese ci為例,其中big5表示字符集,ci表示校對規...