排序规则基本概念和误区

原创 2017年09月26日 08:31:03

前言


昨天在论坛里面遇到一个比较特殊的场景。他的公司做的是海外的项目,中英再加一个当地语言,要兼容三种文字啊.
那有没有什么字符集或排序规则,能兼容所有文字的?对于海外项目很痛苦啊 .Oracle 有AL32UTF8 ,MySQL 有UTF8 ,那SQL Server 有吗?


基本概念



ASCII编码
在计算机发明后不久,计算机只在美国用。他们创造出了ASCII编码,来表示:空格、标点符号、数字、大小写字母,控制符等。可以完整的表达所有的英文。但是也只支持英文。

GBK编码
后来随着计算机的流行,中国人民通过对 ASCII 编码的中文扩充改造,产生了 GB2312 编码,可以表示6000多个常用汉字。汉字实在是太多了,包括繁体和各种字符,于是产生了 GBK 编码,它包括了 GB2312 中的编码,同时扩充了很多。中国是个多民族国家,各个民族几乎都有自己独立的语言系统,为了表示那些字符,继续把 GBK 编码扩充为 GB18030 编码。

每个国家都像中国一样,把自己的语言编码,于是出现了各种各样的编码,如果你不安装相应的编码,就无法解释相应编码想表达的内容。

终于,有个叫 ISO 的组织看不下去了。他们一起创造了一种编码 UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释。

UTF-8 AND UTF-16
UNICODE 在网络传输中,出现了两个标准 UTF-8 和 UTF-16,分别每次传输 8个位(2个字节)和 16个位(4个字节)。于是就会有人产生疑问,UTF-8 既然能保存那么多文字、符号,为什么国内还有这么多使用 GBK 等编码的人?因为 UTF-8 等编码体积比较大,占电脑空间比较多,如果面向的使用人群绝大部分都是中国人,用 GBK 等编码也可以。


总的来说:
  • Unicode 是「字符集」
  • UTF-8 是「编码规则」

其中:
  • 字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
  • 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

排序规则


比如我们常用的:Chinese_PRC_CI_AS ,前面部分是Chinese_PRC 这个部分表示支持的中国大陆的字符集。但是这里有个特别需要注意的事项,划重点,在很多博客上面会有这样的描述:

大陆简体字UNICODE的排序规则

这里有很大的歧义。并不是说这个排序规则对所有字符都是有的Unicode。这样说并不准确。


排序规则的后半部份即后缀 含义: 
  _BIN 二进制排序 
  _CI(CS) 是否区分大小写,CI不区分,CS区分(case-insensitive/case-sensitive)
  _AI(AS) 是否区分重音,AI不区分,AS区分(accent-insensitive/accent-sensitive)
  _KI(KS) 是否区分假名类型,KI不区分,KS区分(kanatype-insensitive/kanatype-sensitive)
  _WI(WS) 是否区分宽度 WI不区分,WS区分(width-insensitive/width-sensitive) 
区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,
比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项


Unicode

SQL SERVER 是支持Unicode的。对应的字符类型是nchar,nvarchar.


总结

所以,SQL SERVER 没有这样的和ORACLE UTF-8类似的排序规则。。如果是三种文字,建议把所有的字符类型定义为nchar,nvarchar 。




版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z10843087/article/details/78091328

[易飞]二进制排序规则下-汉字字典排序

易飞的数据库是采取二进制排序规则,在统计小计和总计过程,位置出现偏差。 小-X,总-Z 应该会在相对后面才OK的。参照百度做法 处理方法: 一、首先准备一个拼音表 CREATE TABLE a...
  • david_520042
  • david_520042
  • 2011-12-08 13:26:26
  • 3255

[易飞]修改数据库的排序规则

SQL Server 2008安装好后,发现服务器排序规则不对,又不想重装SQL Server。  假设当前默认实例的服务器排序规则是:Chinese_PRC_CI_AS,要修改成Chinese_PR...
  • david_520042
  • david_520042
  • 2015-03-26 13:44:20
  • 1328

_BIN 二进制排序

_BIN   二进制排序        _CI_AI   不区分大小写、不区分重音、不区分假名类型、不区分宽度        _CI_AI_WS   不区分大小写、不区分重音、不区分假名类型、区分...
  • hr541659660
  • hr541659660
  • 2015-06-04 18:22:31
  • 712

关于SQL SERVER排序规则

 一、排序规则简介: 什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server  中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用...
  • feixianxxx
  • feixianxxx
  • 2009-10-05 12:01:00
  • 25512

Sql Server排序规则的简介、选择、应用

 一、排序规则简介:什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server  中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的...
  • cxyyxc
  • cxyyxc
  • 2007-08-12 22:28:00
  • 2436

字符串按照字典序排序

按照字典序从小到大排序 void sort(int n) { char temp[100]; for(int i=0;i
  • Martind
  • Martind
  • 2016-05-17 12:33:31
  • 7236

字符串按规则排序算法

写这个东西源自于公司组织的一次编程道场,最后的总结就是,尽量使用既有的库,将问题转化为既有库算法能解决的问题,可读性第一,效率第二。老大们说的话总是让人觉得醍醐灌顶,不要自己实现一个功能为了去榨取那么...
  • dog250
  • dog250
  • 2011-12-07 21:54:10
  • 5482

软件测试的几大误区

我们暂且不去评析软件测试在当今it公司中的地位,只说大家对软件测试的认识。基于我短暂的经验,我总结出软件测试几个最常见的误区,供大家研究:   一大误区:测试简单,对技术要求不高   这是对测试最...
  • xqtesting
  • xqtesting
  • 2014-07-25 12:37:11
  • 728

需求调研的几个误区

软件系统的建设工作,大多数是从需求收集工作开始,逐一开展建设。需求调研,既是软件系统建设的头等大事,也是难点。很多失项目,由于走入需求调研工作的误区,导致项目失败。因此,本文就需求调研的几个主要误区展...
  • lejuo
  • lejuo
  • 2015-02-10 01:17:56
  • 1699

对于mysql中字符串的排序

一个varchar 的字段 存放 1,2 11等 将字段*1或者+0可以将MySQL字符串字段按数值排序 select * from table where 1   order by id+0 d...
  • aa_moon
  • aa_moon
  • 2016-12-02 15:54:49
  • 3341
收藏助手
不良信息举报
您举报文章:排序规则基本概念和误区
举报原因:
原因补充:

(最多只允许输入30个字)