中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

SQL Server 與 MySQL 中排序規(guī)則與字符集相關(guān)知識(shí)的一點(diǎn)總結(jié)

2018-07-30    來(lái)源:importnew

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

字符集&&排序規(guī)則

字符集是針對(duì)不同語(yǔ)言的字符編碼的集合,比如UTF-8字符集,GBK字符集,GB2312字符集等等,不同的字符集使用不同的規(guī)則給字符進(jìn)行編碼。排序規(guī)則則是在特定字符集的基礎(chǔ)上特定的字符排序方式,排序規(guī)則是基于字符集的,是對(duì)字符集在排序方式維度上的一個(gè)劃分。

排序規(guī)則是依賴于字符集的,一種字符集可以有多種排序規(guī)則,但是一種排序規(guī)則只能基于某一種字符集的,比如中文字符集,也即漢字,可以按照“拼音排序”、“按姓氏筆劃排序”等等。而對(duì)于英語(yǔ),就沒(méi)有“拼音”和“姓氏筆畫(huà)”,但是可以分為區(qū)分大小寫(xiě)、不區(qū)分大小寫(xiě)等等,而其他語(yǔ)言下面也有自己特定的排序規(guī)則。

在SQL Server中,任何一種字符集的數(shù)據(jù)庫(kù),都能存儲(chǔ)任何一種語(yǔ)言的字符。

并不是說(shuō)拉。↙atin)字符集的數(shù)據(jù)就存儲(chǔ)不了中文,中文(Chinese)字符集的數(shù)據(jù)庫(kù)就存儲(chǔ)不了蒙古語(yǔ)(只要操作系統(tǒng)本身支持)。sqlserver中,不管哪種字符集(實(shí)際上是排序規(guī)則)的數(shù)據(jù)庫(kù)(或者字段),都是可以使用nvarchar(或者nchar),而nvarchar(或者nchar)是可以存儲(chǔ)任意非Unicode字符的。至于排序規(guī)則,那是根據(jù)不同的字符集所支持的不同的排序規(guī)則人為定義的。

SQL Server中的字符集和排序規(guī)則

排序規(guī)則只不過(guò)是指定了存儲(chǔ)的數(shù)據(jù)的排序(比較)規(guī)則而已,換句話說(shuō)就是,排序規(guī)則中已經(jīng)包含了字符集的信息。因此在sqlserver中 ,不需要關(guān)心字符集,只需要關(guān)心排序規(guī)則,sqlserver中在創(chuàng)建只能指定排序規(guī)則(不能直接指定字符集),如截圖,只能指定collation,也就是字符集

?

在MySQL中的字符集和排序規(guī)則

上面說(shuō)了,排序規(guī)則是依賴于字符集的,一種字符集可以有多種排序規(guī)則,但是一種排序規(guī)則只能基于某一種字符集的。如下是MySQL中排序規(guī)則和字符集的對(duì)應(yīng)關(guān)系。

MySQL的建庫(kù)語(yǔ)法比較扯,可以指定字符集和排序規(guī)則,如果指定的排序規(guī)則在字符集的下面,則是沒(méi)有問(wèn)題的,如果指定的排序規(guī)則不在字符集下面,則會(huì)報(bào)錯(cuò)。

比如下面這一句,排序規(guī)則utf8_bin是屬于字符集utf8下面的一種排序規(guī)則,這個(gè)語(yǔ)句執(zhí)行是沒(méi)有問(wèn)題的
create database test_database2 charset utf8 collate utf8_bin;
再比如下面這一句,排序規(guī)則latin1_bin不是屬于字符集utf8下面的一種排序規(guī)則,這個(gè)語(yǔ)句執(zhí)行是會(huì)報(bào)錯(cuò)的
create database test_database2 charset utf8 collate latin1_bin;

以上是字符集和排序規(guī)則在sqlserver和MySQL中的一些基本應(yīng)用,再說(shuō)說(shuō)常用的排序規(guī)則的區(qū)別

***_genera_ci & ***_genera_cs & ***_bin 常見(jiàn)排序規(guī)則的特點(diǎn)

以上是某種字符集下常用的三種排序規(guī)則,下面以常見(jiàn)的utf8為例說(shuō)明。

  • utf8_genera_ci不區(qū)分大小寫(xiě),ci為case insensitive的縮寫(xiě),即大小寫(xiě)不敏感,
  • utf8_general_cs區(qū)分大小寫(xiě),cs為case sensitive的縮寫(xiě),即大小寫(xiě)敏感,但是目前MySQL版本中已經(jīng)不支持類似于***_genera_cs的排序規(guī)則,直接使用utf8_bin替代。
  • utf8_bin將字符串中的每一個(gè)字符用二進(jìn)制數(shù)據(jù)存儲(chǔ),區(qū)分大小寫(xiě)。

那么,同樣是區(qū)分大小寫(xiě),utf8_general_cs和utf8_bin有什么區(qū)別?

  • cs為case sensitive的縮寫(xiě),即大小寫(xiě)敏感;bin的意思是二進(jìn)制,也就是二進(jìn)制編碼比較。
  • utf8_general_cs排序規(guī)則下,即便是區(qū)分了大小寫(xiě),但是某些西歐的字符和拉丁字符是不區(qū)分的,比如?=a,但是有時(shí)并不需要?=a,所以才有utf8_bin
  • utf8_bin的特點(diǎn)在于使用字符的二進(jìn)制的編碼進(jìn)行運(yùn)算,任何不同的二進(jìn)制編碼都是不同的,因此在utf8_bin排序規(guī)則下:?<>a

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

?

在utf8_bin排序規(guī)則下,A<>a,?<>a

所以要想?yún)^(qū)分大小寫(xiě),有沒(méi)有特殊需求,就直接使用utf8_bin(實(shí)際上***_general_cs在MySQL中本身就不支持,在SQL Server中支持)。以上字符集的特點(diǎn)以及使用情況在SQL Server中表現(xiàn)為類似。

標(biāo)簽: Mysql 數(shù)據(jù)庫(kù)

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:深入 Spring Boot:編寫(xiě)兼容 Spring Boot1 和 Spring Boot2 的 Starter

下一篇:使用 SpringAOP 獲取一次請(qǐng)求流經(jīng)方法的調(diào)用次數(shù)和調(diào)用耗時(shí)