设为首页 收藏本站
查看: 737|回复: 0

[经验分享] SQL Server 与MySQL中排序规则与字符集相关知识的一点总结

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-10-19 06:55:10 | 显示全部楼层 |阅读模式
  字符集&&排序规则
  字符集是针对不同语言的字符编码的集合,比如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下面的一种排序规则,这个语句执行是没有问题的
  create database test_database2 charset utf8 collate utf8_bin;
  再比如下面这一句,排序规则latin1_bin不是属于字符集utf8下面的一种排序规则,这个语句执行是会报错的
  create database test_database2 charset utf8 collate latin1_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排序规则下,Aa,äa

  所以要想区分大小写,有没有特殊需求,就直接使用utf8_bin(实际上***_general_cs在MySQL中本身就不支持,在SQL Server中支持)
  以上字符集的特点以及使用情况在SQL Server中表现为类似。
  来源:博客园
  链接:http://www.cnblogs.com/wy123/p/9377676.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623319-1-1.html 上篇帖子: Centos6.4下安装及配置FTP Server 下篇帖子: SQL Server “sa” 登陆失败+还原备份数据库内存限制
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表