

# 管理 Amazon RDS for Microsoft SQL Server 的排序规则和字符集
<a name="Appendix.SQLServer.CommonDBATasks.Collation"></a>

本主题提供有关如何在 Amazon RDS 中管理 Microsoft SQL Server 的排序规则和字符集的指导。它说明了如何在数据库创建期间配置排序规则并在以后对其进行修改，从而确保根据语言和区域设置要求正确处理文本数据。此外，它还介绍了在 Amazon RDS 中的 SQL Server 环境内保持兼容性和性能的最佳实践。

SQL Server 支持多个级别的排序规则。您可以在创建数据库实例时设置默认服务器排序规则。您可以在数据库、表或列级别覆盖排序规则。

**Topics**
+ [Microsoft SQL Server 的服务器级别排序规则](#Appendix.SQLServer.CommonDBATasks.Collation.Server)
+ [Microsoft SQL Server 的数据库级别排序规则](#Appendix.SQLServer.CommonDBATasks.Collation.Database-Table-Column)

## Microsoft SQL Server 的服务器级别排序规则
<a name="Appendix.SQLServer.CommonDBATasks.Collation.Server"></a>

在创建 Microsoft SQL Server 数据库实例时，您可以设置所要使用的服务器排序规则。如果您未选择其他排序规则，则服务器级别排序规则默认为 SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS。服务器排序规则默认应用到所有数据库和数据库对象。

**注意**  
从数据库快照还原时，无法更改排序规则。

Amazon RDS 当前支持以下服务器排序规则：


| 排序规则 | 说明 | 
| --- | --- | 
|  Arabic\$1CI\$1AS  |  Arabic，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Chinese\$1PRC\$1BIN2  |  Chinese-PRC，二进制代码点排序顺序  | 
|  Chinese\$1PRC\$1CI\$1AS  |  Chinese-PRC，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Chinese\$1Taiwan\$1Stroke\$1CI\$1AS  |  Chinese-Taiwan-Stroke，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Danish\$1Norwegian\$1CI\$1AS  |  Danish-Norwegian，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1KS  |  Danish-Norwegian，不区分大小写，区分重音，区分假名，不区分全半角  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1KS\$1WS  |  Danish-Norwegian，不区分大小写，区分重音，区分假名，区分全半角  | 
|  Danish\$1Norwegian\$1CI\$1AS\$1WS  |  Danish-Norwegian，不区分大小写，区分重音，不区分假名，区分全半角  | 
|  Danish\$1Norwegian\$1CS\$1AI  |  Danish-Norwegian，区分大小写，不区分重音，不区分假名，不区分全半角  | 
|  Danish\$1Norwegian\$1CS\$1AI\$1KS  |  Danish-Norwegian，区分大小写，不区分重音，区分假名，不区分全半角  | 
|  Finnish\$1Swedish\$1100\$1BIN  |  Finnish-Swedish-100，二进制排序  | 
|  Finnish\$1Swedish\$1100\$1BIN2  |  Finnish-Swedish-100，二进制代码点比较排序  | 
|  Finnish\$1Swedish\$1100\$1CI\$1AI  |  Finnish-Swedish-100，不区分大小写，不区分重音，不区分假名，不区分全半角  | 
|  Finnish\$1Swedish\$1100\$1CI\$1AS  |  Finnish-Swedish-100，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Finnish\$1Swedish\$1CI\$1AS  |  芬兰语、瑞典语和瑞典语（芬兰）不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  French\$1CI\$1AS  |  French，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Greek\$1CI\$1AS  |  Greek，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Greek\$1CS\$1AS  |  Greek，区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Hebrew\$1BIN  |  Hebrew，二进制排序  | 
|  Hebrew\$1CI\$1AS  |  Hebrew，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Japanese\$1BIN  | Japanese，二进制排序 | 
|  Japanese\$1CI\$1AS  |  Japanese，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Japanese\$1CS\$1AS  |  Japanese，区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS  |  Japanese，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，不区分变体选择器  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS\$1KS\$1VSS  |  Japanese，不区分大小写，区分重音，区分假名，不区分全半角，补充字符，区分变体选择器  | 
|  Japanese\$1XJIS\$1140\$1CI\$1AS\$1VSS  |  Japanese，不区分大小写，区分重音，不区分假名，不区分全半角，补充字符，区分变体选择器  | 
|  Japanese\$1XJIS\$1140\$1CS\$1AS\$1KS\$1WS  |  Japanese，区分大小写，区分重音，区分假名，区分全半角，补充字符，不区分变体选择器  | 
|  Korean\$1Wansung\$1CI\$1AS  |  Korean\$1Wansung，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Latin1\$1General\$1100\$1BIN  |  Latin1-General-100，二进制排序  | 
|  Latin1\$1General\$1100\$1BIN2  |  Latin1-General-100，二进制代码点排序顺序  | 
|  Latin1\$1General\$1100\$1BIN2\$1UTF8  |  Latin1-General-100，二进制代码点排序顺序，UTF-8 编码  | 
|  Latin1\$1General\$1100\$1CI\$1AS  |  Latin1-General-100，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Latin1\$1General\$1100\$1CI\$1AS\$1SC\$1UTF8  |  Latin1-General-100，不区分大小写，区分重音，补充字符，UTF-8 编码  | 
|  Latin1\$1General\$1BIN  |  Latin1-General，二进制排序  | 
|  Latin1\$1General\$1BIN2  |  Latin1-General，二进制代码点排序顺序  | 
|  Latin1\$1General\$1CI\$1AI  |  Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角  | 
|  Latin1\$1General\$1CI\$1AS  |  Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Latin1\$1General\$1CI\$1AS\$1KS  |  Latin1-General，不区分大小写，区分重音，区分假名，不区分全半角  | 
|  Latin1\$1General\$1CS\$1AS  |  Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Modern\$1Spanish\$1CI\$1AS  |  Modern\$1Spanish，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Polish\$1CI\$1AS  |  Polish，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  SQL\$11xCompat\$1CP850\$1CI\$1AS  |  对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 49  | 
|  SQL\$1Latin1\$1General\$1CP1\$1CI\$1AI  |  对于 Unicode 数据为 Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1252 上的 SQL Server 排序顺序 54  | 
|  **SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS（默认值）**  |  对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1252 上的 SQL Server 排序顺序 52  | 
|  SQL\$1Latin1\$1General\$1CP1\$1CS\$1AS  |  对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1252 上的 SQL Server 排序顺序 51  | 
|  SQL\$1Latin1\$1General\$1CP437\$1CI\$1AI  |  对于 Unicode 数据为 Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 437 上的 SQL Server 排序顺序 34  | 
|  SQL\$1Latin1\$1General\$1CP850\$1BIN  |  Latin1-General，对于 Unicode 数据为二进制排序顺序，对于非 Unicode 数据为代码页 850 上的 SQL Server 排序顺序 40  | 
|  SQL\$1Latin1\$1General\$1CP850\$1BIN2  |  Latin1-General，对于 Unicode 数据为二进制代码点排序顺序，对于非 Unicode 数据为代码页 850 上的 SQL Server 排序顺序 40  | 
|  SQL\$1Latin1\$1General\$1CP850\$1CI\$1AI  |  对于 Unicode 数据为 Latin1-General，不区分大小写，不区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 44  | 
|  SQL\$1Latin1\$1General\$1CP850\$1CI\$1AS  |  对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 42  | 
|  SQL\$1Latin1\$1General\$1Pref\$1CP850\$1CI\$1AS  |  对于 Unicode 数据为 Latin1-General-Pref，不区分大小写，区分重音，不区分假名，不区分全半角，对于非 Unicode 数据，为代码页 850 上的 SQL Server 排序顺序 183  | 
|  SQL\$1Latin1\$1General\$1CP1256\$1CI\$1AS  |  对于 Unicode 数据为 Latin1-General，不区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1256 上的 SQL Server 排序顺序 146  | 
|  SQL\$1Latin1\$1General\$1CP1255\$1CS\$1AS  |  对于 Unicode 数据为 Latin1-General，区分大小写，区分重音，不区分假名，不区分全半角；对于非 Unicode 数据，为代码页 1255 上的 SQL Server 排序顺序 137  | 
|  Thai\$1CI\$1AS  |  Thai，不区分大小写，区分重音，不区分假名，不区分全半角  | 
|  Turkish\$1CI\$1AS  |  Turkish，不区分大小写，区分重音，不区分假名，不区分全半角  | 

您也可以使用 AWS CLI 以编程方式检索支持的排序规则列表：

```
aws rds describe-db-engine-versions --engine sqlserver-ee --list-supported-character-sets --query 'DBEngineVersions[].SupportedCharacterSets[].CharacterSetName' | sort -u
```

选择排序规则：
+ 如果您使用 Amazon RDS 控制台，则在创建新的数据库实例时，请选择 **Additional configuration**（其他配置），然后在 **Collation**（排序规则）字段中输入排序规则。有关更多信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。
+ 如果使用 AWS CLI，请在 `--character-set-name` 命令中使用 `create-db-instance` 选项。有关更多信息，请参阅 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html)。
+ 如果使用 Amazon RDS API，请在 `CharacterSetName` 操作中使用 `CreateDBInstance` 参数。有关更多信息，请参阅 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html)。

## Microsoft SQL Server 的数据库级别排序规则
<a name="Appendix.SQLServer.CommonDBATasks.Collation.Database-Table-Column"></a>

当创建新数据库或数据库对象时，您可以通过覆盖排序规则在数据库、表或列级别更改默认排序规则。例如，如果您的默认服务器排序规则为 SQL\$1Latin1\$1General\$1CP1\$1CI\$1AS，您可将其更改为 Mohawk\$1100\$1CI\$1AS 以支持 Mohawk 排序规则。如果需要，甚至可以对查询中的参数进行类型转换以便使用不同的排序规则。

例如，以下查询将 AccountName 列的默认排序规则更改为 Mohawk\$1100\$1CI\$1AS

```
CREATE TABLE [dbo].[Account]
	(
	    [AccountID] [nvarchar](10) NOT NULL,
	    [AccountName] [nvarchar](100) COLLATE Mohawk_100_CI_AS NOT NULL 
	) ON [PRIMARY];
```

Microsoft SQL Server 数据库引擎通过内置 NCHAR、NVARCHAR 和 NTEXT 数据类型支持 Unicode。例如，如果您需要 CJK 支持，请对字符存储使用这些 Unicode 数据类型，并在创建数据库和表时覆盖默认的服务器排序规则。下面列出了一些由 Microsoft 提供的链接，其中包括 SQL Server 的排序规则和 Unicode 支持：
+ [使用排序规则](http://msdn.microsoft.com/en-us/library/ms187582%28v=sql.105%29.aspx) 
+ [排序规则和国际术语](http://msdn.microsoft.com/en-us/library/ms143726%28v=sql.105%29) 
+ [使用 SQL Server 排序规则](http://msdn.microsoft.com/en-us/library/ms144260%28v=sql.105%29.aspx) 
+ [数据库和数据库引擎应用程序的国际注意事项](http://msdn.microsoft.com/en-us/library/ms190245%28v=sql.105%29.aspx)