[========]

SQL Server 排序规则

影响

排序规则会作用到 order、where、group 语句中。

默认中文 Windows 系统中安装的数据库使用的排序规则为:Chinese_PRC_CI_AS

选项 描述
区分大小写 (_CS) 区分大写字母和小写字母。 如果选择此项,排序时小写字母将在其对应的大写字母之前。 如果未选择此选项,排序规则将不区分大小写。 即 SQL Server 在排序时将大写字母和小写字母视为相同。 通过指定 _CI,可以显式选择不区分大小写。
区分重音 (_AS) 区分重音字符和非重音字符。 例如,“a”和“ấ”视为不同字符。 如果未选择此选项,则排序规则将不区分重音。 即 SQL Server 在排序时将字母的重音形式和非重音形式视为相同。 通过指定 _AI,可以显式选择不区分重音。
区分全半角 (_WS) 区分全角字符和半角字符。 如果未选择此选项,SQL Server 会在排序时将同一字符的全角和半角形式视为相同。 省略此选项是指定不区分全半角的唯一方法。

参考:

排序规则和 Unicode 支持

深入SQL Server 排序规则的原理

效果演示

表结构如下:

排序规则:

  • name Chinese_PRC_CS_AS_WS 大小写 重音 全半角
  • sss Chinese_PRC_CI_AI_WS 全半角

数据:

id,name,sss
1,123aaa啊,啊
2,123aaa啊(),啊aaa()
3,123aaa啊(),啊aaa()
4,123AAA啊(),啊AAA()

查询语句:

select * from dbo.Table_1
where name = '123aaa啊()' select * from dbo.Table_1
where sss = '啊aaa()'

输出结果:

  1. 检查大小写、全半角,最后匹配到一条结果

  2. 检查全半角、不检查大小写,最后匹配到两条结果

更改数据库排序规则

排序规则级别:

  1. 服务器级排序规则
  2. 数据库级排序规则
  3. 列级排序规则
  4. 表达式级排序规则

服务器级排序规则

默认服务器排序规则是在 SQL Server 安装过程中设置的,由操作系统 (OS) 区域设置确定的默认排序规则。它将成为系统数据库和所有用户数据库的默认排序规则。

数据库级排序规则

创建或修改数据库时,可使用 CREATE DATABASE 或 ALTER DATABASE 语句的 COLLATE 子句指定默认数据库排序规则。 如果未指定排序规则,将为该数据库分配服务器排序规则。

除非更改服务器的排序规则,否则无法更改系统数据库的排序规则。

可以修改数据库的排序规则:

ALTER DATABASE myDB COLLATE Chinese_PRC_CS_AS_WS;

重要:更改数据库级排序规则不会影响现有列级排序规则或表达式级排序规则。

列级排序规则

当创建或更改表时,可使用 COLLATE 子句指定每个字符串列的排序规则。 如果不指定排序规则,将为列分配数据库的默认排序规则。

可使用如下的 ALTER TABLE 语句更改列的排序规则:

ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Chinese_PRC_CS_AS_WS;

查询时指定规则

查询条件后加 COLLATE语句,比如上面的第二个查询,这样只会查到一条结果。

select * from dbo.Table_1
where sss = '啊aaa()' collate Chinese_PRC_CS_AS_WS

建议

使用 Unicode 数据类型

请使用 Unicode 数据类型(nchar 、nvarchar 和 ntext ),而不是非 Unicode 数据类型(char 、varchar 和 text )。

Unicode 是一种将码位映射到字符的标准。由于它旨在涵盖全球所有语言的所有字符,因此无需使用不同代码页来处理不同字符集。支持国际化客户端的数据库应始终使用 Unicode 数据类型,而不应使用非 Unicode 数据类型。

备注

对于 Unicode 数据类型,数据库引擎最多可以使用 UCS-2 表示 65,535 个字符;或者,如果使用了附属字符,则可表示整个 Unicode 范围(‭1,114,111 个字符)。 如需详细了解如何启用增补字符,请参阅 补充字符

使用二进制排序规则

二进制排序规则区分大小写。

对于非 Unicode数据类型,数据比较将基于 ANSI 代码页中定义的码位。

对于Unicode数据类型,数据比较将基于 Unicode 码位,不考虑区域设置。由于 Unicode 码位的比较相对简单,因此二进制排序规则有助于提高应用程序性能。

SQL Server 中有两种类型的二进制排序规则:

  • 在 BIN 排序规则中,仅首字符按照码位排序,其余字符根据其字节值排序。
  • 更新的 BIN2 排序规则中,所有字符根据其码位排序。

SQL Server 排序规则的影响的更多相关文章

  1. 利用脚本修改SQL SERVER排序规则

    利用脚本修改SQL SERVER排序规则 编写人:CC阿爸 2014-3-1 l  今年的一项重要工作是对公司所用系统进行繁简的转换,程序转成简体基本很容易解决,但数据库转换成简体,就没那么容易了.经 ...

  2. sql server ------创建本地数据库 SQL Server 排序规则

    sql server完整复制数据库 sql server导入导出方法 SQL Server 排序规则

  3. SQL Server排序规则

    在使用数据库的过程中,总会碰到一些特别的需求.有时候需要储存中文字符,区分大小写或者按照中文的比划顺序排序.这就涉及到了对数据库排列规则的选择. 我们一般可以选择数据库名称-->右键属性(Pro ...

  4. sql server 排序规则

    /*   排序规则根据特定语言和区域设置的标准指定对  字符串  数据 进行排序和比较的规则.   以 ORDER BY 子句为例:如果按升序排列,说英语的人认为字符串 Chiapas 应排在 Col ...

  5. 根据SQL Server排序规则创建顺序GUID

    public static class GuidUtil { , , , , , , DateTimeKind.Utc).Ticks / 10000L; /// <summary> /// ...

  6. SQL Server排序规则不一致 - Collate Database_Default

    http://www.cnblogs.com/chencidi/archive/2014/07/02/3820386.html 使用多库查询时会出现排序规则冲突的问题 解决办法 在字段后面添加Coll ...

  7. Sql Server 排序规则字符集的冲突问题

    可通过如下sql 进行修改: 如果整个DB都不一致: Alter database Expense_Portal collate Chinese_PRC_CI_AS 某张Table的栏位不一致: ) ...

  8. 修改SQL Server 排序规则 (未能排它地锁定数据库以执行该操作)

    use master go alter database DBName set single_user go alter database DBName COLLATE Chinese_PRC_CI_ ...

  9. SQL Server排序函数row_number和rank的区别

    SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...

随机推荐

  1. celery监控工具flower

    特性 用Celery事件实时监控 任务进程和历史 能够显示任务的详细信息(arguments, start time, runtime等) 图形化和统计 远程控制 查看worker状态和统计 关闭和重 ...

  2. Hadoop 3.1.3伪分布式环境安装Hive 3.1.2的异常总结

    背景:hadoop版本为3.1.3, 且以伪分布式形式安装,hive版本为3.1.2,hive为hadoop的一个客户端. 1. 安装简要步骤 (1) 官网下载apache-hive-3.1.2-bi ...

  3. centos7:ssh免密登陆设置

    1.使用root用户登录,进入到目录/root/.ssh 2.执行命令:ssh-keygen -t rsa 一路回车,完成后会在目录/root/.ssh下面生成文件 id_rsa和id_rsa.pub ...

  4. flask上下管理文相关 - RequestContetxt & AppContext对象

    RequestContetxt / AppContext对象 1.flask程序启动时 当flask程序启动时,通过源码可知,首先会创建两个LocalStack对象,二者内部会分别创建Local对象( ...

  5. 前端HTML介绍,标签介绍,基础选择器,CSS引入方法

    1. HTML 1.1 前端: 所有用户能看到的界面网页.pc端的应用exe.移动端应用app.微信小程序.手环的时间界面html5为基础的前端:网页.app.微信小程序 1.2 前端三剑客: 1.h ...

  6. form表单Get方式提交时,action中带参数传递不了

    <form action="getPostServlet/getPost.do?param4=param4" method="get"> <i ...

  7. 信用卡分销系统源码、分销系统定制贴牌、信用卡三级分销系统源码、信用卡返佣系统OEM

    信用卡返佣分销系统贴牌,全套源码,可定制UI界面 这一整套绝对是市场上最完善最好的一套系统:里面的特色功能: 1.合伙人功能,解决你前期的资金以及资源问题 2.推广素材库,全方位增加推广效率 3.红包 ...

  8. Cron 表达式学习

    1.7个子域的说明 cron 的表达式是字符串,实际上是由七子表达式(从左到右),描述个别细节的时间表.这些子表达式是分开的空白. 顺序(从左到右) 子串 有效数字 有效字符 1 Seconds(秒) ...

  9. 再jsp页面中使用kindeditor 的方法

    1.创建一个动态web工程 2.建立一个static库文件夹把CSS,JS样式放进去 3. 复制HTML代码到jsp页面中 4.在相对路径中加上一个"static/" 5.运行截图

  10. InnoDB 中的锁实现

    InnoDB 中的锁实现 原贴:InnoDB 锁系统及死锁检测实现分析 InnoDB 中,所有事务加的行锁通过一个全局的 hash 表 lock_sys 维护: /* The lock system ...