SQL Server 排序规则
SQL Server 中的排序规则为数据提供排序规则、大小写和重音敏感性属性。排序规则定义了表示数据库元数据中每个字符的位模式。 SQL Server 支持在数据库中存储具有不同排序规则的对象。
下面提到了与排序相关的选项:
- 区分大小写 (_CS)
- 重音敏感 (_AS)
- 假名敏感 (_KS)
- 宽度敏感 (_WS)
- 变化选择器敏感 (_VSS)a
- 二进制 (_BIN)
- 二进制代码点 (_BIN2)
笔记 :
选择二进制 (_BIN) 或二进制代码点 (_BIN2) 时,其他排序选项不可用。
要检查 SQL Server 实例的服务器排序规则,请使用以下命令:
SELECT SERVERPROPERTY('collation');
要查找 SQL Server 实例上可用的排序规则列表,请使用以下命令:
SELECT * FROM sys.fn_helpcollations();
整理级别:
SQL Server 支持以下级别的排序规则:
- 服务器级排序规则:
默认服务器排序规则是在 SQL Server 安装过程中设置的,它成为系统数据库和用户数据库的默认排序规则。将排序规则分配给服务器后,您只能通过导出所有数据库对象和数据、重建主数据库以及导入所有数据库对象和数据来更改它。在创建新数据库或数据库列后,您可以指定所需的排序规则,而不是更改 SQL Server 实例的默认排序规则。
要查找 SQL Server 的服务器级排序规则,请使用以下查询:
SELECT CONVERT(varchar, SERVERPROPERTY('collation'));
- 数据库级排序规则:
数据库排序规则用于数据库中的所有元数据,因此排序规则是数据库中使用的所有字符串列、临时对象、变量名称和其他字符串的默认设置。如果在创建数据库时没有定义排序规则,数据库将使用默认的服务器排序规则。要使用排序规则创建数据库,可以使用 CREATE DATABASE 语句:
句法 -
CREATE DATABASE databasename COLLATE collationtype;
例子 :
CREATE DATABASE GeekDB COLLATE Greek_CS_AI;
要更改用户数据库的排序规则,可以使用 ALTER DATABASE 语句:
句法 -
ALTER DATABASE databasename COLLATE collationtype;
注意:在更改服务器的排序规则之前,无法更改系统数据库的排序规则。
例子 :
ALTER DATABASE GeekDB COLLATE SQL_Latin1_General_CP1_CI_AS;
笔记 :
更改数据库级别的排序规则不会影响列级别或表达式级别的排序规则。 - 列级排序规则:
在创建或更改表时,可以使用 COLLATE 子句为每个字符串列指定排序规则。如果未指定列排序规则,则使用数据库的默认排序规则创建列。要更改列的排序规则,我们可以使用 ALTER TABLE 语句:
句法 -
ALTER TABLE tablename ALTER COLUMN columnnmae COLLATE collationtype;
例子 :
ALTER TABLE Geektable ALTER COLUMN namecol NVARCHAR(10) COLLATE Greek_CS_AI;
- 表达式级排序规则
运行语句时使用表达式级排序规则,它们会影响返回输出的方式。这允许 ORDER BY 排序结果是具体的。句法 -
SELECT * FROM tablename ORDER BY columnname COLLATE collationtype;
例子 :
SELECT * FROM Geektab ORDER BY nname COLLATE SQL_Latin1_General_CP1_CI_AS;