SQL Server 排序规则的影响
[========]
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()'
输出结果:
- 检查大小写、全半角,最后匹配到一条结果
- 检查全半角、不检查大小写,最后匹配到两条结果
更改数据库排序规则
排序规则级别:
- 服务器级排序规则
- 数据库级排序规则
- 列级排序规则
- 表达式级排序规则
服务器级排序规则
默认服务器排序规则是在 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 排序规则的影响的更多相关文章
- 利用脚本修改SQL SERVER排序规则
利用脚本修改SQL SERVER排序规则 编写人:CC阿爸 2014-3-1 l 今年的一项重要工作是对公司所用系统进行繁简的转换,程序转成简体基本很容易解决,但数据库转换成简体,就没那么容易了.经 ...
- sql server ------创建本地数据库 SQL Server 排序规则
sql server完整复制数据库 sql server导入导出方法 SQL Server 排序规则
- SQL Server排序规则
在使用数据库的过程中,总会碰到一些特别的需求.有时候需要储存中文字符,区分大小写或者按照中文的比划顺序排序.这就涉及到了对数据库排列规则的选择. 我们一般可以选择数据库名称-->右键属性(Pro ...
- sql server 排序规则
/* 排序规则根据特定语言和区域设置的标准指定对 字符串 数据 进行排序和比较的规则. 以 ORDER BY 子句为例:如果按升序排列,说英语的人认为字符串 Chiapas 应排在 Col ...
- 根据SQL Server排序规则创建顺序GUID
public static class GuidUtil { , , , , , , DateTimeKind.Utc).Ticks / 10000L; /// <summary> /// ...
- SQL Server排序规则不一致 - Collate Database_Default
http://www.cnblogs.com/chencidi/archive/2014/07/02/3820386.html 使用多库查询时会出现排序规则冲突的问题 解决办法 在字段后面添加Coll ...
- Sql Server 排序规则字符集的冲突问题
可通过如下sql 进行修改: 如果整个DB都不一致: Alter database Expense_Portal collate Chinese_PRC_CI_AS 某张Table的栏位不一致: ) ...
- 修改SQL Server 排序规则 (未能排它地锁定数据库以执行该操作)
use master go alter database DBName set single_user go alter database DBName COLLATE Chinese_PRC_CI_ ...
- SQL Server排序函数row_number和rank的区别
SQL Server排序函数row_number和rank的区别 直接看测试结果 declare @table table(name varchar(100),amount int, memo var ...
随机推荐
- iOS-在AFN基础上进行网络请求的封装
网络请求的思路:如果请求成功的话AFN的responseObject就是解析好的. 1发送网络请求:get/post/或者别的 带上URL,需要传的参数 2判断后台网络状态码有没有请求成功: 3 请求 ...
- JS 正则表达式 控制文本框只能输入中文、英文、数字与指定特殊符号
JS 正则表达式 控制文本框只能输入中文.英文.数字与指定特殊符号(屏蔽表情输入) onkeyup:释放键盘事件 onpaste:粘贴事件 oncontextmenu :鼠标右击事件 只能输入中文: ...
- Linux中移动,复制,删除,打包排除某个目录或文件
移动,复制,删除排除某个文件或目录 cp !(file1|dir2) /data/ 复制文件到/data/,排除file1和dir2 mv !(file1|dir2) /data/ 移动文件到/dat ...
- 《精通并发与Netty》学习笔记(11 - 详解NIO (二) 分散/聚集 Scatter/Gather、Selector)
一.分散/聚集 Scatter/Gather scatter/gather指的在多个缓冲区上实现一个简单的I/O操作,比如从通道中读取数据到多个缓冲区,或从多个缓冲区中写入数据到通道:scatter( ...
- CImage 和 CvvImage 命名空间问题
[问题:名称CImage同时在两个库中出现] 1.出现: ATL #include <atlimage.h> OpenCv #include <highgui.h> #defi ...
- kindeditor 在JSP 中上传文件的配置
1.将kindeditor,jsp,lib目录下的jar文件放到工程的lib目录下 2.将admin-login.jsp,upload_json.jsp,复制到admin的files目录下 3.复制以 ...
- kafka consumer 的配置(五)
fetch.min.bytes. #获取最小字节数据 Consumer 向broker中要数据时是按大小来返回的,如果数据没有达到指定的MB,consumer会处于等待状态,直到broker 从pro ...
- 【转载】SpringBoot-配置发送邮件遇到的一些问题
前言:前一天调用163邮箱发送邮件还么有问题,今天再调用就各种发送不成功,害的我都关闭授权,还花了一毛钱短信费重新开启授权,最后百度到了一篇文章,非常贴切,在此转载下. 本人遇到的错误代码是554,邮 ...
- python+selenium+webdriver+BeautifulSoup实现自动登录
from selenium import webdriverimport timefrom bs4 import BeautifulSoupfrom urllib import requestimpo ...
- python基础(十)--函数进阶
嵌套函数 >>> graphic = '三角形' >>> def chang(): graphic = '正方形' def chang1(): #内部嵌套的函数命名 ...