当前位置: 首页 > 科技观察

SQLServer和MySQL中排序规则和字符集知识汇总

时间:2023-03-12 10:12:48 科技观察

字符集&&排序字符集是不同语言的字符编码集合,如UTF-8字符集、GBK字符集、GB2312字符集、等等等等不同的字符集使用不同的规则对字符进行编码。排序规则是基于特定字符集的特定字符排序方法。排序规则是基于字符集的,是对字符集在排序方式维度上的划分。排序规则取决于字符集。一个字符集可以有多个排序规则,但一个排序规则只能基于某个字符集。比如汉字集,也就是汉字,可以按照“拼音”来排序。、“按姓氏笔画排序”等。对于英文来说,没有“拼音”和“姓氏笔画”之分,但是可以分为区分大小写、不区分大小写等,其他语言也有自己特定的排序规则。在SQLServer中,任何字符集数据库都可以存储任何语言的字符。并不是说拉丁字符集中的数据不能存储中文,中文字符集中的数据库不能存储蒙文(只要操作系统本身支持)。在sqlserver中,无论什么样的字符集(实际上是collat??ion)数据库(或字段),都可以使用nvarchar(或nchar),nvarchar(或nchar)可以存储任何非Unicode字符。至于排序规则,是根据不同字符集支持的不同排序规则,人为定义的。SQLServer中的字符集和排序规则排序规则无非是规定了存储数据的排序(比较)规则。也就是说,排序规则中已经包含了字符集的信息。所以在sqlserver中,不需要关心字符集,只需要关心排序规则。在sqlserver中,只能指定collat??ion规则(不能直接指定字符集),如截图,只能指定collat??ion,即MySQL中的字符集Charactersetandcollat??ion上面说了,collat??ion依赖于字符集。一个字符集可以有多个排序规则,但是一个排序规则只能基于某个字符集。下面是MySQL中排序规则和字符集的对应关系。MySQL创建数据库的语法相当笨拙。您可以指定字符集和排序规则。如果指定的排序规则低于字符集,则没有问题。如果指定的排序规则不在字符集之下,则会报错。比如下面这句话,排序规则utf8_bin是属于字符集utf8的排序规则,执行这条语句是没有问题的。执行这条语句会报错createdatabasetest_database2charsetutf8collat??elatin1_bin;以上是字符集和排序规则在sqlserver和mysql中的一些基本应用,下面说说常用排序规则的区别***_genera_ci&***_genera_cs&***_bin常用排序规则的特点以上是某字符集中常用的三种排序规则,以常用的utf8为例进行说明。utf8_genera_ciisnotcase-sensitive,ci是caseinsensitive的缩写,即不区分大小写,utf8_general_cs是case-sensitive,cs是casesensitive的缩写,即区分大小写,但是目前MySQL版本没有支持类似***_genera_cs的排序规则,直接使用utf8_bin代替。utf8_bin将字符串中的每个字符存储为二进制数据,区分大小写。那么,它也是区分大小写的,utf8_general_cs和utf8_bin有什么区别呢?cs是casesensitive的缩写,即区分大小写;bin的意思是binary,即二进制编码比较。在utf8_general_cs排序规则下,即使区分大小写,一些西欧字符也无法与拉丁字符区分开来,比如?=a,但有时?=a是不需要的,所以utf8_bin的特点是使用的字符不一样二进制编码不同,所以在utf8_bincollat??ion下:?<>aincaseofutf8_genera_ciA=a,?=a在utf8_bincollat??ion下,A<>a,?<>a所以如果要区分大小写,如果你有什么特殊要求,可以直接使用utf8_bin(其实MySQL本身不支持***_general_cs,但是SQLServer是支持的)。上述字符集的特点和用法在SQLServer中是类似的。