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

來源:互聯網
上載者:User

簡要說明

字元集和校對規則
字元集是一套符號和編碼。校對規則是在字元集內用於比較字元的一套規則。
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\_%'

即可查看

注意:

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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.