SQL Server 與MySQL中定序與字元集相關知識的一點總結

來源:互聯網
上載者:User

標籤:區別   ase   lse   根據   blog   大小   gb2312   collate   關心   

原文:SQL Server 與MySQL中定序與字元集相關知識的一點總結

 

字元集&&定序

字元集是針對不同語言的字元編碼的集合,比如UTF-8字元集,GBK字元集,GB2312字元集等等,不同的字元集使用不同的規則給字元進行編碼
定序則是在特定字元集的基礎上特定的字元排序方式,定序是基於字元集的,是對字元集在排序方式維度上的一個劃分。
定序是依賴於字元集的,一種字元集可以有多種定序,但是一種定序只能基於某一種字元集的
比如中文字元集,也即漢字,可以按照“拼音排序”、“按姓氏筆劃排序”等等。
而對於英語,就沒有“拼音”和“姓氏筆畫”,但是可以分為區分大小寫、不區分大小寫等等
而其他語言下面也有自己特定的定序。

在SQL Server中,任何一種字元集的資料庫,都能儲存任何一種語言的字元。
並不是說拉丁(Latin)字元集的資料就儲存不了中文,中文(Chinese)字元集的資料庫就儲存不了蒙古語(只要作業系統本身支援)
sqlserver中,不管哪種字元集(實際上是定序)的資料庫(或者欄位),都是可以使用nvarchar(或者nchar),而nvarchar(或者nchar)是可以儲存任意非Unicode字元的
至於定序,那是根據不同的字元集所支援的不同的定序人為定義的。

 

SQL Server中的字元集和定序
定序只不過是指定了儲存的資料的排序(比較)規則而已,換句話說就是,定序中已經包含了字元集的資訊。
因此在sqlserver中,不需要關心字元集,只需要關心定序,sqlserver中在建立只能指定定序(不能直接指定字元集),
如,只能指定collation,也就是字元集

 

在MySQL中的字元集和定序

上面說了,定序是依賴於字元集的,一種字元集可以有多種定序,但是一種定序只能基於某一種字元集的。
如下是MySQL中定序和字元集的對應關係。

MySQL的建庫文法比較扯,可以指定字元集和定序,
如果指定的定序在字元集的下面,則是沒有問題的,如果指定的定序不在字元集下面,則會報錯。

比如下面這一句,定序utf8_bin是屬於字元集utf8下面的一種定序,這個語句執行是沒有問題的
create database test_database2 charset utf8 collate utf8_bin;
再比如下面這一句,定序latin1_bin不是屬於字元集utf8下面的一種定序,這個語句執行是會報錯的
create database test_database2 charset utf8 collate latin1_bin;

以上是字元集和定序在sqlserver和MySQL中的一些基本應用,再說說常用的定序的區別

 

***_genera_ci & ***_genera_cs & ***_bin 常見定序的特點

以上是某種字元集下常用的三種定序,下面以常見的utf8為例說明
utf8_genera_ci不區分大小寫,ci為case insensitive的縮寫,即大小寫不敏感,
utf8_general_cs區分大小寫,cs為case sensitive的縮寫,即大小寫敏感,但是目前MySQL版本中已經不支援類似於***_genera_cs的定序,直接使用utf8_bin替代。
utf8_bin將字串中的每一個字元用位元據儲存,區分大小寫。
那麼,同樣是區分大小寫,utf8_general_cs和utf8_bin有什麼區別?
cs為case sensitive的縮寫,即大小寫敏感;bin的意思是二進位,也就是二進位編碼比較。
utf8_general_cs定序下,即便是區分了大小寫,但是某些西歐的字元和拉丁字元是不區分的,比如ä=a,但是有時並不需要ä=a,所以才有utf8_bin
utf8_bin的特點在於使用字元的二進位的編碼進行運算,任何不同的二進位編碼都是不同的,因此在utf8_bin定序下:ä<>a

在utf8_genera_ci的情況下A=a,ä=a

 

 在utf8_bin定序下,A<>a,ä<>a

 

所以要想區分大小寫,有沒有特殊需求,就直接使用utf8_bin(實際上***_general_cs在MySQL中本身就不支援,在SQL Server中支援)
以上字元集的特點以及使用方式在SQL Server中表現為類似。

 

以上。

 

SQL Server 與MySQL中定序與字元集相關知識的一點總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.