本指南将介绍使用SQL Server collate命令的基本原理。在这之前,什么是SQL Server整理?
什么是SQL Server校对?
SQL Server校对指的是一组规则,这些规则管理如何对数据库中的字符数据进行排序和比较。SQL Server为处理字符数据提供了广泛的整理方式。这些校对可以处理具有冲突的语言和地区的数据,使数据库能够与世界各地的应用程序兼容。
SQL Server校对级别
在SQL Server中,有三个主要的级别,你可以在那里定义整理。
- SQL Server 实例级别
- 数据库级别
- 列级
请注意,排序名称可以是Windows的排序,也可以是SQL Server提供的排序名称。
你可以在创建数据库时指定拼写类型。如果在创建数据库时没有指定,SQL Server将默认为SQL Server实例所使用的排序方式。
同样地,如果你在创建列时没有定义整理方式,SQL Server将默认为该数据库中使用的整理方式。
SQL Server 实例级别
在安装过程中,你可以为你的SQL Server实例设置你喜欢的整理方式。如果你已经安装了SQL Server,你可以使用安装中心向导来重新定义你的排序类型。
要查看你的SQL Server实例的当前排序,请打开SQL Server Management Studio。
右键单击你的SQL Server实例,选择属性选项。

在 "属性 "窗口中,选择左边菜单中的 "常规 "标签。这将显示关于你的SQL Server实例的一般信息,包括默认的整理类型。

在我们的例子中,默认的排序方式被设置为SQL_Latin1_General_CP1_C1_AS。这是一种SQL Server的排序方式,而不是Windows的排序方式,正如SQL_前缀所表示的。
另一部分包含排序的名称,在本例中是Latin1_General_CP_AS。值CI表示该排序不区分大小写,而AS表示它对口音敏感。
为了获得关于SQL Server默认排序的更详细的描述,请使用sp_helpsort存储过程,如图所示。
EXEC sp_helpsort;
这个存储过程应该返回如图所示的信息。
Server DEFAULT collation
-----------------------------------------------------------------------------------------------------------------
Latin1-General, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive FOR Unicode DATA, SQL Server Sort ORDER 52 ON Code Page 1252 FOR non-Unicode DATA
数据库级别的整理
我们可以在数据库级别上定义整理方式。如前所述,除非明确指定,否则数据库将继承SQL Server实例的排序方式。
要在SQL Server Management Studio (SSMS)中查看数据库的排序,请右键单击目标数据库并打开属性窗口。

在 "属性 "窗口中,选择 "常规 "选项卡并导航到 "维护 "部分。你应该看到列出了数据库的整理方式。

在我们的例子中,数据库继承了与SQL Server实例相同的整理方式。
**设置数据库排序
**要在数据库创建过程中设置你想要的排序,你可以使用下面的查询。
CREATE DATABASE sample_database
COLLATE SQL_Latin1_General_CP1_CS_AS;
在上面的查询中,我们用SQL_Latin1_General_CP1_CS_AS的整理方式创建一个数据库。它与SQL_Latin1_General_CI_AI相似,只是它对大小写敏感,正如校对名称中的CS和AS所示。

**在现有的数据库中设置校对
**SQL Server允许你在创建后使用ALTER DATABASE命令来改变校对方式。
例如,下面的查询将数据库的排序从SQL_Latin1_General_CP1_CS_AS改为SQL_Slovak_CP1250_CS_AS。
USE sample_database;
ALTER DATABASE sample_database COLLATE SQL_Slovak_CP1250_CS_AS;
在改变数据库的整理方式之前,确保所有与数据库的连接都已关闭。否则,查询将失败。
**SQL Server显示支持的拼写方式
**要查看你的SQL Server版本支持的拼写方式,请使用下面的查询。
SELECT name, description FROM sys.fn_helpcollations();
如果你使用的是SQL Server 2019,我们已经提供了一个支持的排序列表。在下面的资源中下载该文件。
列级整理
在大多数情况下,你会希望一个字符列继承与数据库类似的拼写方式。然而,你可以在创建列的过程中明确指定列的拼写方式。
请记住,只有当列是char类型的时候,你才能定义一个列的拼写,比如:
- VARCHAR
- NVARCHAR
- CHAR
- NTEXT
- TEXT
要使用T-SQL设置一个列,请使用如图所示的示例查询。
CREATE TABLE info(
id INT,
text_ VARCHAR(50) COLLATE SQL_EBCDIC280_CP1_CS_AS
);
要查看一个列的整理情况,可以使用sp_help存储过程,如下所示。
EXEC sp_help info;
该命令应该返回关于该列的信息,包括整理方式。

结论
在这篇文章中,我们探讨了SQL Server整理的概念,它们是什么,以及我们如何查看或改变不同层次的整理,如SQL Server实例级、数据库级和列级。