字符集&&排序规则

字符集是针对不同语言的字符编码的集合,比如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下面的一种排序规则,这个语句执行是没有问题的

createdatabasetest_database2 charset utf8collateutf8_bin;

再比如下面这一句,排序规则latin1_bin不是属于字符集utf8下面的一种排序规则,这个语句执行是会报错的

createdatabasetest_database2 charset utf8collatelatin1_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中表现为类似。

【编辑推荐】

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

mysql 汉字笔画排序规则_SQL Server与MySQL中排序规则与字符集相关知识的一点总结...相关推荐

  1. SQL Server 与 MySQL 中排序规则与字符集相关知识的一点总结

    字符集&&排序规则 字符集是针对不同语言的字符编码的集合,比如UTF-8字符集,GBK字符集,GB2312字符集等等,不同的字符集使用不同的规则给字符进行编码.排序规则则是在特定字符集 ...

  2. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare(转)

    sql server和mysql都是我们经常用到的数据库系统,下面就为您介绍sql server和mysql变量赋值的区别,希望对您能有所启迪. sql server中变量要先申明后赋值: 局部变量用 ...

  3. sql server转mysql工具下载_SQL Server转换为MySQL工具推荐(Mss2sql)

    SQL Server转换为MySQL工具,用了一下 感觉蛮不错的. 分享上来,同时也以便记录下来以后自用. 工具名称:Mss2sql 来个操作流程: 1.首先下载工具 用户名与密码都是www.linu ...

  4. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare

    sql server和mysql都是我们经常用到的数据库系统,下面就为您介绍sql server和mysql变量赋值的区别,希望对您能有所启迪. sql server中变量要先申明后赋值: 局部变量用 ...

  5. php执行sql内存溢出_SQL Server 2017:SQL排序,溢出,内存和自适应内存授予反馈

    php执行sql内存溢出 This article explores SQL Sort, Spill, Memory and Adaptive Memory Grant Feedback mechan ...

  6. 将mysql表导入sqlserver中_sql server to mysql 导入数据库

    由于工作原因需要将sqlserver 转换为mysql数据库.这期间有朋友帮忙万分感谢.感谢 大概步骤是: 1.配置MYSQL的ODBC,把表结构导过去. 2.然后再配置ACCESS ODBC 3.把 ...

  7. mysql与ms sql server_MS SQL Server和MySQL区别

    1 MySQL支持enum,和set类型,SQL Server不支持 2 MySQL不支持nchar,nvarchar,ntext类型 3 MySQL的递增语句是AUTO_INCREMENT,而MS ...

  8. sql server新增列_SQL Server 2016安装中的新增功能?

    sql server新增列 SQL Server 2016 introduced officially on the 1st of June 2016. It comes with many new ...

  9. sql如何遍历几百万的表_SQL Server遍历表中记录的2种方法(使用表变量和游标)

    SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表 ...

  10. 计算机word排序在哪,word里的排序在哪里 word文档中排序在哪儿

    word文档中排序在工具栏的"开始"选项中. 查找及使用步骤: 1.打开一个需要排序的Word文档. 2.在页面上方的工具栏中找到下图做红色标注的排序图标. 3.点击排序图标后,进 ...

最新文章

  1. 计算机减法英语,英语加减乘除的表达
  2. RethinkDB创始人教你如何打造一个伟大的互联网产品
  3. USDC流通量已经超过33亿
  4. vivo换手机云服务器,换新手机迁移数据很麻烦?这里两招教你快速迁移,有云服务不用愁...
  5. 市场调研思维导图模板
  6. 电视网络机顶盒破解记录
  7. 用Python代码实现将exl表格内容,批量写到word里面
  8. web开发与设计,这些网站为你提供大量的开发资源与设计灵感
  9. Unity外接设备摇杆控制
  10. 2021年剑桥高考成绩查询,2021年剑桥五级KET、PET、FCE成绩查询指南
  11. kali mysql 卸载,linux mysql卸载命令
  12. 【金融】- 净资产收益率(ROE)计算,杜邦分析法+python处理
  13. 【笔记总结】高中英语——其二:名词性从句
  14. 国外 2D 游戏引擎相关站点
  15. 如何使用WiFi的WPS功能
  16. TCP/UDP端口列表(转)
  17. icem密度盒怎么设置_使用ICEM绘制非结构网格时,如何提高网格质量?
  18. 作为一位资深Java程序员应该注意的几点
  19. js中如何遍历对象属性
  20. 实用的外贸收款工具比较

热门文章

  1. 打砖块 java_java实现打砖块小游戏
  2. .img文件怎么打开(解压缩)
  3. 阿里快递扩张之路:集齐“四通一达”后持续增持,再花百亿图啥?
  4. 女程序员是最好的语言 | 3·8特辑
  5. iOS开发者,你不可错过的资源
  6. Photoshop抠图(色彩范围命令扣人物/动物毛发图)
  7. Photoshop 抠图方式
  8. storyBoard中TopLayout和SuperView
  9. oracle length
  10. 字节跳动否认完成支付牌照收购 或是基于央行批准的不确定性