

# 了解适用于 Aurora PostgreSQL 的 Babelfish 中的排序规则
<a name="babelfish-collations"></a>

使用 Babelfish 创建 Aurora PostgreSQL 数据库集群时，请为数据选择排序规则。*排序规则* 指定以给定的书面人类语言生成文本或字符的排序顺序和位模式。排序规则包括用于比较一组给定位模式的数据的规则。排序规则与本地化有关。不同的区域设置会影响字符映射、排序顺序等。排序规则属性反映在各种排序规则的名称中。有关属性的信息，请参阅 [Babelfish collation attributes table](#bfish-collation-attributes-table)。

Babelfish 将 SQL Server 排序规则映射到 Babelfish 提供的类似排序规则。Babelfish 使用文化敏感的字符串比较和排序顺序预先定义了 Unicode 排序规则。Babelfish 还提供了一种将 SQL Server 数据库中的排序规则转换为最接近匹配的 Babelfish 排序规则的方法。针对不同的语言和区域提供了特定于区域设置的排序规则。

某些排序规则指定了与客户端编码对应的代码页。根据每个输出列的排序规则，Babelfish 会自动从服务器编码转换为客户端编码。

Babelfish 支持 [Babelfish supported collations table](#bfish-collations-table)中列出的排序规则。Babelfish 将 SQL Server 排序规则映射到 Babelfish 提供的类似排序规则。

Babelfish 使用 International Components for Unicode 排序规则库的 153.80 版本。有关 ICU 排序规则的更多信息，请参阅 ICU 文档中的[排序规则](https://unicode-org.github.io/icu/userguide/collation/)。要了解有关 PostgreSQL 和排序规则的更多信息，请参阅 PostgreSQL 文档中的[排序规则支持](https://www.postgresql.org/docs/current/collation.html)。

**Topics**
+ [控制排序规则和区域设置的数据库集群参数](#babelfish-collations.parameters)
+ [Babelfish 中的确定性和非确定性排序规则](#babelfish-collations.deterministic-nondeterministic)
+ [Babelfish 支持数据库级别的排序规则](#babelfish-collations.database-level)
+ [Babelfish 中的服务器和对象排序规则](#babelfish-collations.reference-tables-supported-collations)
+ [Babelfish 中的默认排序规则行为](#babelfish-collations-default)
+ [管理排序规则](collation.managing.md)
+ [排序规则限制和行为区别](collation.limitations.md)

## 控制排序规则和区域设置的数据库集群参数
<a name="babelfish-collations.parameters"></a><a name="collation-related-parameters"></a>

以下参数会影响排序规则行为。

**babelfishpg\_tsql.default\_locale**  
此参数指定排序规则使用的默认区域设置。此参数与 [Babelfish collation attributes table](#bfish-collation-attributes-table)中列出的属性结合使用，以便为特定语言和区域自定义排序规则。此参数的默认值为 `en-US`。  
默认区域设置适用于以“BBF”开头的所有 Babelfish 排序规则名称，以及映射到 Babelfish 排序规则的所有 SQL Server 排序规则。在现有 Babelfish 数据库集群上更改此参数的设置不会影响现有排序规则的区域设置。有关排序规则的列表，请参阅 [Babelfish supported collations table](#bfish-collations-table)。

**babelfishpg\_tsql.server\_collation\_name**  
此参数指定服务器（Aurora PostgreSQL 数据库集群实例）和数据库的默认排序规则。默认值为 `sql_latin1_general_cp1_ci_as`。`server_collation_name` 必须是一种 `CI_AS` 排序规则，是因为在 T-SQL 中，服务器排序规则决定了标识符的比较方式。  
当您创建 Babelfish 数据库集群时，可以从可供选择的列表中选择 **Collation name**（排序规则名称）。其中包括 [Babelfish supported collations table](#bfish-collations-table)中列出的排序规则。请勿在 Babelfish 数据库创建之后修改 `server_collation_name`。

您在创建 Babelfish for Aurora PostgreSQL 数据库集群时选择的设置存储在与此集群关联且与这些参数对应的数据库集群参数组中，并设置其排序规则行为。

## Babelfish 中的确定性和非确定性排序规则
<a name="babelfish-collations.deterministic-nondeterministic"></a>

Babelfish 支持确定性和非确定性排序规则：
+ *确定性排序规则* 将具有相同字节序列的字符评估为相等。这意味着 `x` 和 `X` 在确定性排序规则中是不相等的。确定性的排序规则可以区分大小写 (CS) 且区分重音 (AS)。
+ *非确定性排序规则* 不需要完全相同的匹配。非确定性排序规则评估 `x` 和 `X` 相等。非确定性排序规则不区分大小写（CI）和/或不区分重音（AI）。

在下表中，您可以找到在使用非确定性排序规则时，Babelfish 和 PostgreSQL 之间的一些行为差异。


| Babelfish | PostgreSQL | 
| --- | --- | 
| 对于 CI\_AS 排序规则支持 LIKE 子句。 | 对于非确定性排序规则不支持 LIKE 子句。 | 
| 仅在 Babelfish 版本 4.2.0 的以下 AI 排序规则中才支持 LIKE 子句：[See the AWS documentation website for more details](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/babelfish-collations.html) | 对于非确定性排序规则不支持 LIKE 子句。 | 

有关 Babelfish 与 SQL Server 和 PostgreSQL 相比的其他限制和行为差异的列表，请参阅[排序规则限制和行为区别](collation.limitations.md)。

Babelfish 和 SQL Server 遵循描述排序规则属性的排序规则命名约定，如下表所示。<a name="bfish-collation-attributes-table"></a>


| 属性 | 描述 | 
| --- | --- | 
| AI | 不区分重音。 | 
| AS | 区分重音。 | 
| BIN2 | BIN2 请求按代码点顺序对数据进行排序。Unicode 代码点顺序与 UTF-8、UTF-16 和 UCS-2 编码的字符顺序相同。代码点顺序是一种快速的确定性排序规则。 | 
| CI | 不区分大小写。 | 
| CS | 区分大小写。 | 
| PREF | 要在小写字母之前对大写字母进行排序，请使用 PREF 排序规则。如果比较不区分大小写，在没有其他区别的情况下，字母的大写版本排序将在小写版本之前。ICU 库支持带有 `colCaseFirst=upper` 的大写字母首选项，但不适用于 CI\_AS 排序规则。<br />PREF 只能应用于 `CS_AS` 确定性排序规则。 | 

## Babelfish 支持数据库级别的排序规则
<a name="babelfish-collations.database-level"></a>

Babelfish 支持下列数据库级别的排序规则：
+ bbf\_unicode\_bin2
+ bbf\_unicode\_cp1\_ci\_ai
+ bbf\_unicode\_cp1\_ci\_as
+ bbf\_unicode\_cp1250\_ci\_ai
+ bbf\_unicode\_cp1250\_ci\_as
+ bbf\_unicode\_cp1257\_ci\_ai
+ bbf\_unicode\_cp1257\_ci\_as
+ estonian\_ci\_ai
+ estonian\_ci\_as
+ finnish\_swedish\_ci\_ai
+ finnish\_swedish\_ci\_as
+ french\_ci\_ai
+ french\_ci\_as
+ latin1\_general\_bin2
+ latin1\_general\_ci\_ai
+ latin1\_general\_ci\_as
+ latin1\_general\_90\_bin2
+ latin1\_general\_100\_bin2
+ latin1\_general\_140\_bin2
+ modern\_spanish\_ci\_ai
+ modern\_spanish\_ci\_as
+ polish\_ci\_ai
+ polish\_ci\_as
+ sql\_latin1\_general\_cp1\_ci\_ai
+ sql\_latin1\_general\_cp1\_ci\_as
+ sql\_latin1\_general\_cp1250\_ci\_as
+ sql\_latin1\_general\_cp1251\_ci\_as
+ sql\_latin1\_general\_cp1257\_ci\_as
+ traditional\_spanish\_ci\_ai
+ traditional\_spanish\_ci\_as

**注意**  
要在数据库级别使用一个不同的排序规则，请确保它与服务器级别排序规则相匹配。有关更多信息，请参阅 [Babelfish 中的服务器和对象排序规则](#babelfish-collations.reference-tables-supported-collations)

## Babelfish 中的服务器和对象排序规则
<a name="babelfish-collations.reference-tables-supported-collations"></a>

将以下排序规则用作服务器排序规则或对象排序规则。<a name="bfish-collations-table"></a>


| 排序规则 ID | 备注 | 
| --- | --- | 
| bbf\_unicode\_general\_ci\_as | 支持不区分大小写的比较和 LIKE 运算符。 | 
| bbf\_unicode\_cp1\_ci\_as | [非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1252.txt)也被称为 CP1252。 | 
| bbf\_unicode\_CP1250\_ci\_as | [非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1250.txt)用于表示使用拉丁文字的中欧和东欧语言的文本。 | 
| bbf\_unicode\_CP1251\_ci\_as | 使用西里尔文字的语言的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1251.txt)。 | 
| bbf\_unicode\_cp1253\_ci\_as | 用于代表现代希腊语的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1253.txt)。 | 
| bbf\_unicode\_cp1254\_ci\_as | 支持土耳其语的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1254.txt)。 | 
| bbf\_unicode\_cp1255\_ci\_as | 支持希伯来语的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1255.txt)。 | 
| bbf\_unicode\_cp1256\_ci\_as | 用来编写使用阿拉伯文字的语言的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1256.txt)。 | 
| bbf\_unicode\_cp1257\_ci\_as | 用于支持爱沙尼亚语、拉脱维亚语和立陶宛语的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1257.txt)。 | 
| bbf\_unicode\_cp1258\_ci\_as | 用于编写越南语字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1258.txt)。 | 
| bbf\_unicode\_cp874\_ci\_as | 用于编写泰语字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit874.txt)。 | 
| sql\_latin1\_general\_cp1250\_ci\_as | 用来表示拉丁字符的[非确定性单字节字符编码](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1250.txt)。 | 
| sql\_latin1\_general\_cp1251\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1251.txt)。 | 
| sql\_latin1\_general\_cp1\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1252.txt)。 | 
| sql\_latin1\_general\_cp1253\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1253.txt)。 | 
| sql\_latin1\_general\_cp1254\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1254.txt)。 | 
| sql\_latin1\_general\_cp1255\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1255.txt)。 | 
| sql\_latin1\_general\_cp1256\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1256.txt)。 | 
| sql\_latin1\_general\_cp1257\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1257.txt)。 | 
| sql\_latin1\_general\_cp1258\_ci\_as | 支持拉丁字符的[非确定性排序规则](https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit1258.txt)。 | 
| chinese\_prc\_ci\_as | 支持中文 (PRC) 的非确定性排序规则。 | 
| cyrillic\_general\_ci\_as | 支持西里尔文的非确定性排序规则。 | 
| finnish\_swedish\_ci\_as | 支持芬兰语的非确定性排序规则。 | 
| french\_ci\_as | 支持法语的非确定性排序规则。 | 
| japanese\_ci\_as | 支持日语的非确定性排序规则。在 Babelfish 2.1.0 及更高版本中支持。 | 
| korean\_wansung\_ci\_as | 支持韩语的非确定性排序规则（带字典排序）。 | 
| latin1\_general\_ci\_as | 支持拉丁字符的非确定性排序规则。 | 
| modern\_spanish\_ci\_as | 支持现代西班牙语的非确定性排序规则。 | 
| polish\_ci\_as | 支持波兰语的非确定性排序规则。 | 
| thai\_ci\_as | 支持泰语的非确定性排序规则。 | 
| traditional\_spanish\_ci\_as | 支持西班牙语的非确定性排序规则（传统排序）。 | 
| turkish\_ci\_as | 支持土耳其语的非确定性排序规则。 | 
| ukrainian\_ci\_as | 支持乌克兰语的非确定性排序规则。 | 
| vietnamese\_ci\_as | 支持越南语的非确定性排序规则。 | 

您可以将以下排序规则作为对象排序规则。<a name="bfish-icu-collations-table"></a>


| 方言 | 确定性选项 | 非确定性选项 | 
| --- | --- | --- | 
| 阿拉伯语 | Arabic\_CS\_AS | Arabic\_CI\_AS<br />Arabic\_CI\_AI | 
| 阿拉伯语文字 | BBF\_Unicode\_CP1256\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1256\_CS\_AS | BBF\_Unicode\_CP1256\_CI\_AI<br />BBF\_Unicode\_CP1256\_CS\_AI | 
| 二元 | latin1\_general\_bin2<br />BBF\_Unicode\_BIN2 | – | 
| 使用拉丁字母的中欧和东欧语言 | BBF\_Unicode\_CP1250\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1250\_CS\_AS | BBF\_Unicode\_CP1250\_CI\_AI<br />BBF\_Unicode\_CP1250\_CS\_AI | 
| 中文 | Chinese\_PRC\_CS\_AS | Chinese\_PRC\_CI\_AS<br />Chinese\_PRC\_CI\_AI | 
| Cyrillic\_General | Cyrillic\_General\_CS\_AS | Cyrillic\_General\_CI\_AS<br />Cyrillic\_General\_CI\_AI | 
| 西里尔文字 | BBF\_Unicode\_CP1251\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1251\_CS\_AS | BBF\_Unicode\_CP1251\_CI\_AI<br />BBF\_Unicode\_CP1251\_CS\_AI | 
| 爱沙尼亚语 | Estonian\_CS\_AS | Estonian\_CI\_AS<br />Estonian\_CI\_AI | 
| 爱沙尼亚语、拉脱维亚语和立陶宛语 | BBF\_Unicode\_CP1257\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1257\_CS\_AS | BBF\_Unicode\_CP1257\_CI\_AI<br />BBF\_Unicode\_CP1257\_CS\_AI | 
| Finnish\_Swedish | Finnish\_Swedish\_CS\_AS | Finnish\_Swedish\_CI\_AS<br />Finnish\_Swedish\_CI\_AI | 
| 法语 | French\_CS\_AS | French\_CI\_AS<br />French\_CI\_AI | 
| 希腊语 | Greek\_CS\_AS | Greek\_CI\_AS<br />Greek\_CI\_AI | 
| 希伯来语 | BBF\_Unicode\_CP1255\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1255\_CS\_AS<br />Hebrew\_CS\_AS | BBF\_Unicode\_CP1255\_CI\_AI<br />BBF\_Unicode\_CP1255\_CS\_AI<br />Hebrew\_CI\_AS<br />Hebrew\_CI\_AI | 
| 日语（Babelfish 2.1.0 及更高版本） | Japanese\_CS\_AS | Japanese\_CI\_AI<br />Japanese\_CI\_AS | 
| Korean\_Wamsung | Korean\_Wamsung\_CS\_AS | Korean\_Wamsung\_CI\_AS<br />Korean\_Wamsung\_CI\_AI | 
| 代码页 CP1252 的拉丁字符 | latin1\_general\_cs\_as<br />BBF\_Unicode\_General\_CS\_AS<br />BBF\_Unicode\_General\_Pref\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1\_CS\_AS<br />BBF\_Unicode\_CP1\_CS\_AS | latin1\_general\_ci\_as<br />latin1\_general\_ci\_ai<br />latin1\_general\_cs\_ai<br />BBF\_Unicode\_General\_CI\_AI<br />BBF\_Unicode\_General\_CS\_AI<br />BBF\_Unicode\_CP1\_CI\_AI<br />BBF\_Unicode\_CP1\_CS\_AI | 
| 现代希腊语 | BBF\_Unicode\_CP1253\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1253\_CS\_AS | BBF\_Unicode\_CP1253\_CI\_AI<br />BBF\_Unicode\_CP1253\_CS\_AI | 
| Modern\_Spanish | Modern\_Spanish\_CS\_AS | Modern\_Spanish\_CI\_AS<br />Modern\_Spanish\_CI\_AI | 
| 蒙古语 | Mongolian\_CS\_AS | Mongolian\_CI\_AS<br />Mongolian\_CI\_AI | 
| 波兰语 | Polish\_CS\_AS | Polish\_CI\_AS<br />Polish\_CI\_AI | 
| 泰语 | BBF\_Unicode\_CP874\_CS\_AS<br />BBF\_Unicode\_Pref\_CP874\_CS\_AS<br />Thai\_CS\_AS | BBF\_Unicode\_CP874\_CI\_AI<br />BBF\_Unicode\_CP874\_CS\_AI<br />Thai\_CI\_AS、Thai\_CI\_AI | 
| Traditional\_Spanish | Traditional\_Spanish\_CS\_AS | Traditional\_Spanish\_CI\_AS<br />Traditional\_Spanish\_CI\_AI | 
| 土耳其语 | BBF\_Unicode\_CP1254\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1254\_CS\_AS<br />Turkish\_CS\_AS | BBF\_Unicode\_CP1254\_CI\_AI<br />BBF\_Unicode\_CP1254\_CS\_AI<br />Turkish\_CI\_AS、Turkish\_CI\_AI | 
| 乌克兰语 | Ukranian\_CS\_AS | Ukranian\_CI\_AS<br />Ukranian\_CI\_AI | 
| 越南语 | BBF\_Unicode\_CP1258\_CS\_AS<br />BBF\_Unicode\_Pref\_CP1258\_CS\_AS<br />Vietnamese\_CS\_AS | BBF\_Unicode\_CP1258\_CI\_AI<br />BBF\_Unicode\_CP1258\_CS\_AI<br />Vietnamese\_CI\_AS<br />Vietnamese\_CI\_AI | 

## Babelfish 中的默认排序规则行为
<a name="babelfish-collations-default"></a>

以前，可排序的数据类型的默认排序规则是 `pg_catalog.default`。数据类型和依赖于这些数据类型的对象遵循区分大小写的排序规则。这种情况可能会影响使用不区分大小写的排序规则的数据集的 T-SQL 对象。从 Babelfish 2.3.0 开始，可排序的数据类型（TEXT 和 NTEXT 除外）的默认排序规则与 `babelfishpg_tsql.server_collation_name` 参数中的排序规则相同。当您升级到 Babelfish 2.3.0 时，将在创建数据库集群时自动选择默认排序规则，这不会产生任何明显的影响。