[========]

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. 敏捷管理的大概背景和Scrum的特性

    我们在转型Scrum敏捷开发时,一直会有一个很大的困惑问题,那就是我的团队适不适合使用敏捷项目管理工具和开发方式.我大概总结了下Scrum的大概样子可以参考下.总之敏捷管理不是口号,他只是一种工具,只 ...

  2. 鸟哥私房菜基础篇:程序管理与 SELinux 初探习题

    猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0440processcontrol.php 1-简单说明什么是程序 (program) 而什么是程序 ( ...

  3. openssl交叉编译

    目录 openssl交叉编译 title: openssl交叉编译 date: 2019/12/18 21:09:33 toc: true --- openssl交叉编译 tar xvf openss ...

  4. apue-ubuntu环境搭建

    目录 apue环境搭建 title: apue环境搭建 date: 2019/11/19 19:25:18 toc: true --- apue环境搭建 下载编译 wget http://www.ap ...

  5. java.net.UnknownHostException: MySQLMASTER: MySQLMASTER: 未知的名称或服务

    linux环境在连接Activemq的时候报以下信息,找了半天配了下host  OK了,记录一下. java.net.UnknownHostException: MySQLMASTER: MySQLM ...

  6. 洛谷 题解 P2676 【超级书架】

    题解 P2676 [超级书架] 这题就只是一个从大到小的排序而已,用"sort"函数 再用"while"判断奶牛塔的高度是否比书架高度要高 送上代码: #inc ...

  7. poj1696(极角排序,贪心)

    ---恢复内容开始--- 题目链接:https://vjudge.net/problem/POJ-1696 题意:有n个点,规定起点,每次只能向左走,不能与之前的路径交叉,求最多能经过几个点. 思路: ...

  8. html中'disabled'与'readonly'的区别

    html中'disabled'与'readonly'的区别 此随笔增量编辑 disabled 在提交表单的时候 值不会带入表单中, 而readonly则可以将值带入表单中.

  9. Kafka 原理

    消息队列内部实现原理 两种消息传输方式 Kafka kafka 简介 kafka 集群角色 Kafka 工作流程分析 Kafka 生产过程分析 写入方式 分区(partition) 副本(replic ...

  10. .Net Core 3.0原生Json解析器

    微软官方博客中描述了为什么构造了全新的Json解析器而不是继续使用行业准则Json.Net 微软博客地址:https://devblogs.microsoft.com/dotnet/try-the-n ...