如何使用SQL Server的Collate命令

372 阅读4分钟

本指南将介绍使用SQL Server collate命令的基本原理。在这之前,什么是SQL Server整理?

什么是SQL Server校对?

SQL Server校对指的是一组规则,这些规则管理如何对数据库中的字符数据进行排序和比较。SQL Server为处理字符数据提供了广泛的整理方式。这些校对可以处理具有冲突的语言和地区的数据,使数据库能够与世界各地的应用程序兼容。

SQL Server校对级别

在SQL Server中,有三个主要的级别,你可以在那里定义整理。

  1. SQL Server 实例级别
  2. 数据库级别
  3. 列级

请注意,排序名称可以是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类型的时候,你才能定义一个列的拼写,比如:

  1. VARCHAR
  2. NVARCHAR
  3. CHAR
  4. NTEXT
  5. 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实例级、数据库级和列级。