

# 用于 EBCDIC 和其他大型机迁移的 RDS for PostgreSQL 排序规则
<a name="PostgreSQL.Collations.mainframe.migration"></a>

RDS for PostgreSQL 版本 10 及更高版本包括 ICU 版本 60.2，该版本基于 Unicode 10.0，并包括来自 Unicode 通用区域设置数据存储库 CLDR 32 的排序规则。这些软件国际化库确保字符编码以一致的方式呈现，无论操作系统或平台如何。有关 Unicode CLDR-32 的更多信息，请参阅 Unicode CLDR 网站上的 [CLDR 32 版本注释](https://cldr.unicode.org/index/downloads/cldr-32)。您可以通过 [ICU 技术委员会（ICU-TC）](https://icu.unicode.org/home)网站了解有关 Unicode (ICU) 国际化组件的更多信息。有关 ICU-60 的信息，请参阅[下载 ICU 60](https://icu.unicode.org/download/60)。

从版本 14.3 开始，RDS for PostgreSQL 还包括排序规则，这些排序规则有助于从基于 EBCDIC 的系统进行数据集成和转换。扩展二进制编码的十进制交换码或 *EBCDIC* 编码通常由大型机操作系统使用。这些 Amazon RDS 提供的排序规则的定义非常狭窄，仅对那些直接映射到 EBCDIC 代码页的 Unicode 字符进行排序。字符按 EBCDIC 代码点顺序排序，以便在转换后进行数据验证。这些排序规则不包括非规范化表单，也不包含不直接映射到源 EBCDIC 代码页上字符的 Unicode 字符。

EBCDIC 代码页和 Unicode 代码点之间的字符映射基于 IBM 发布的表。可以从 IBM 下载整套的[压缩文件](http://download.boulder.ibm.com/ibmdl/pub/software/dw/java/cdctables.zip)。RDS for PostgreSQL 使用这些映射以及 ICU 提供的工具来创建本节的各表中列出的排序规则。排序规则名称包括 ICU 要求的语言和国家/地区。但是，EBCDIC 代码页没有指定语言，一些 EBCDIC 代码页涵盖多个国家/地区。这意味着表中排序规则名称的语言和国家/地区部分是任意的，它们不需要与当前的区域设置相匹配。换句话说，代码页码是该表中排序规则名称的最重要部分。您可以在任何 RDS for PostgreSQL 数据库中使用以下各表列出的任何排序规则。
+ [Unicode to EBCDIC collations table](#ebcdic-table) – 一些大型机数据迁移工具在内部使用 LATIN1 或 LATIN9 来编码和处理数据。此类工具使用往返操作方案来保持数据完整性并支持反向转换。使用 LATIN1 编码处理数据（这种编码不需要特殊处理）的工具可以使用此表中的排序规则。
+ [Unicode to LATIN9 collations table](#latin9-table) – 您可以在任何 RDS for PostgreSQL 数据库中使用这些排序规则。

 

在下表中，您可以找到 RDS for PostgreSQL 中可用的排序规则，这些排序规则将 EBCDIC 代码页映射到 Unicode 代码点。我们建议您将此表中的排序规则用于需要根据 IBM 代码页的顺序进行排序的应用程序开发。<a name="ebcdic-table"></a>


| PostgreSQL 排序规则名称 | 代码页映射和排序顺序的描述 | 
| --- | --- | 
| da-DK-cp277-x-icu | 直接映射到 IBM EBCDIC 代码页 277（每个转换表）的 Unicode 字符按 IBM CP 277 代码点顺序排序 | 
| de-DE-cp273-x-icu | 直接映射到 IBM EBCDIC 代码页 273（每个转换表）的 Unicode 字符按 IBM CP 273 代码点顺序排序 | 
| en-GB-cp285-x-icu | 直接映射到 IBM EBCDIC 代码页 285（每个转换表）的 Unicode 字符按 IBM CP 285 代码点顺序排序 | 
| en-US-cp037-x-icu | 直接映射到 IBM EBCDIC 代码页 037（每个转换表）的 Unicode 字符按 IBM CP 37 代码点顺序排序 | 
| es-ES-cp284-x-icu | 直接映射到 IBM EBCDIC 代码页 284（每个转换表）的 Unicode 字符按 IBM CP 284 代码点顺序排序 | 
| fi-FI-cp278-x-icu | 直接映射到 IBM EBCDIC 代码页 278（每个转换表）的 Unicode 字符按 IBM CP 278 代码点顺序排序 | 
| fr-FR-cp297-x-icu | 直接映射到 IBM EBCDIC 代码页 297（每个转换表）的 Unicode 字符按 IBM CP 297 代码点顺序排序 | 
| it-IT-cp280-x-icu | 直接映射到 IBM EBCDIC 代码页 280（每个转换表）的 Unicode 字符按 IBM CP 280 代码点顺序排序 | 
| nl-BE-cp500-x-icu | 直接映射到 IBM EBCDIC 代码页 500（每个转换表）的 Unicode 字符按 IBM CP 500 代码点顺序排序 | 

Amazon RDS 提供了一组额外的排序规则，这些排序规则使用 IBM 发布的表，按源数据的 EBCDIC 代码页的原始代码点顺序，对映射到 LATIN9 字符的 Unicode 代码点进行排序。<a name="latin9-table"></a>


| PostgreSQL 排序规则名称 | 代码页映射和排序顺序的描述 | 
| --- | --- | 
| da-DK-cp1142m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1142（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1142 代码点顺序排序 | 
| de-DE-cp1141m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1141（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1141 代码点顺序排序 | 
| en-GB-cp1146m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1146（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1146 代码点顺序排序 | 
| en-US-cp1140m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1140（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1140 代码点顺序排序 | 
| es-ES-cp1145m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1145（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1145 代码点顺序排序 | 
| fi-FI-cp1143m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1143（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1143 代码点顺序排序 | 
| fr-FR-cp1147m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1147（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1147 代码点顺序排序 | 
| it-IT-cp1144m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1144（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1144 代码点顺序排序 | 
| nl-BE-cp1148m-x-icu | 映射到最初从 IBM EBCDIC 代码页 1148（每个转换表）转换而来的 LATIN9 字符的 Unicode 字符按 IBM CP 1148 代码点顺序排序 | 

在下文中，您可以找到使用 RDS for PostgreSQL 排序规则的示例。

```
db1=> SELECT pg_import_system_collations('pg_catalog');
 pg_import_system_collations
-----------------------------
                          36
db1=> SELECT '¤' < 'a' col1;
 col1
------
 t  
db1=> SELECT '¤' < 'a' COLLATE "da-DK-cp277-x-icu" col1;
 col1
------
 f
```

我们建议您将 [Unicode to EBCDIC collations table](#ebcdic-table)和 [Unicode to LATIN9 collations table](#latin9-table)中的排序规则用于需要根据 IBM 代码页的顺序进行排序的应用程序开发。以下排序规则（后缀为字母“b”）在 `pg_collation` 中也可见，但供 AWS 中的大型机数据集成和迁移工具使用，这些工具将代码页映射到特定的代码点偏移，并要求在排序规则中进行特殊处理。换句话说，不建议使用以下排序规则。
+ da-DK-277b-x-icu
+ da-DK-1142b-x-icu
+ de-DE-cp273b-x-icu
+ de-DE-cp1141b-x-icu
+ en-GB-cp1146b-x-icu
+ en-GB-cp285b-x-icu
+ en-US-cp037b-x-icu
+ en-US-cp1140b-x-icu
+ es-ES-cp1145b-x-icu
+ es-ES-cp284b-x-icu
+ fi-FI-cp1143b-x-icu
+ fr-FR-cp1147b-x-icu
+ fr-FR-cp297b-x-icu
+ it-IT-cp1144b-x-icu
+ it-IT-cp280b-x-icu
+ nl-BE-cp1148b-x-icu
+ nl-BE-cp500b-x-icu

要了解有关将应用程序从大型机环境迁移到 AWS 的更多信息，请参阅[什么是 AWS Mainframe Modernization？](https://docs.aws.amazon.com/m2/latest/userguide/what-is-m2.html)

有关在 PostgreSQL 中管理排序规则的更多信息，请参阅 PostgreSQL 文档中的[排序规则支持](https://www.postgresql.org/docs/current/collation.html)。