排序规则基本概念和误区

原创 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 。




版权声明:本文为博主原创文章,未经博主允许不得转载。

关联规则应用到图书推荐的问题

本文是观看了小象学院《大数据应用中的算法如何创造商业价值》,现在做一下梳理 问题:当当网中”最佳拍档”中的关联规则算法 对于解决一个实际的问题,我们看一下一般的思路流程是什么样的 1. ...
  • nwpuwyk
  • nwpuwyk
  • 2014年12月21日 15:13
  • 1161

MySQL中的排序规则

在新建MySQL数据库或表的时候经常会选择字符集和排序规则。数据库用的字符集大家都知道是怎么回事,那排序规则是什么呢? 排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点: 1、  ...
  • u013044000
  • u013044000
  • 2016年12月18日 21:40
  • 626

MySQL字符集与排序规则

原文链接:https://my.oschina.net/u/2958/blog/108257MySQL的字符集支持(Character Set Support)有两个方面:字符集(Character ...
  • liboren920528
  • liboren920528
  • 2017年04月27日 17:49
  • 531

sqlserver排序规则介绍以及修改

一、排序规则简介: 什么叫排序规则呢?MS是这样描述的:"在 Microsoft SQL Server  中, 字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存 储和比较字...
  • iamlihongwei
  • iamlihongwei
  • 2016年11月10日 11:17
  • 1748

SQL Server 排序规则

-- 返回当前 Windows 和 SQL Server 支持的所有排序规则的列表 select * from ::fn_helpcollations() where name like 'Chine...
  • kk185800961
  • kk185800961
  • 2014年12月25日 23:43
  • 1601

SQL Server 更改排序规则

最近因为测试环境 MSSQL 服务器排序规则区分大小写,导致实用到临时表(tempdb)的数据、临时对象都区分了大小写。所以重建了系统数据库并更改了排序规则,这里再次总结一下。 开始之前,先确认排...
  • kk185800961
  • kk185800961
  • 2017年05月26日 10:45
  • 1397

Oracle 排序规则

SQL> select * from t1 where id>=1 and id
  • zhaoyangjian724
  • zhaoyangjian724
  • 2016年07月01日 18:59
  • 271

MySql之排序规则问题(2)

今天看到这个Sql语句,之前听说过,但是并未弄懂,因此在此特意做下笔记: userName varchar(20) collate chinese_prc_ci_as null 1.首先,...
  • u011662320
  • u011662320
  • 2014年08月05日 16:48
  • 1062

Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结

ci 是 case insensitive, 即 “大小写不敏感”, a 和 A 会在字符判断中会被当做一样的。 bin 是二进制, a 和 A 会别区别对待。...
  • yeruby
  • yeruby
  • 2015年06月06日 20:49
  • 1877

MySQL 查看编码 排序规则

MySQL 查看编码格式 查看数据库的排序规则 mysql> show variables like 'collation%'; +----------------------+-----------...
  • XIAO_XIAO_C
  • XIAO_XIAO_C
  • 2017年01月11日 19:10
  • 2053
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序规则基本概念和误区
举报原因:
原因补充:

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