Babelfish 支持的排序规则 - Amazon Aurora

Babelfish 支持的排序规则

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

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

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

Babelfish 支持 Babelfish supported collations table中列出的排序规则。Babelfish 将 SQL Server 排序规则映射到 Babelfish 提供的类似排序规则。

Babelfish 使用 International Components for Unicode 排序规则库的 153.80 版本。有关 ICU 排序规则的更多信息,请参阅 ICU 文档中的排序规则。要了解有关 PostgreSQL 和排序规则的更多信息,请参阅 PostgreSQL 文档中的排序规则支持

控制排序规则和区域设置的数据库集群参数

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

babelfishpg_tsql.default_locale

此参数指定排序规则使用的原定设置区域设置。此参数与 Babelfish collation attributes table中列出的属性结合使用,以便为特定语言和区域自定义排序规则。此参数的默认值为 en-US

原定设置区域设置适用于以“BBF”开头的所有 Babelfish 排序规则名称,以及映射到 Babelfish 排序规则的所有 SQL Server 排序规则。在现有 Babelfish 数据库集群上更改此参数的设置不会影响现有排序规则的区域设置。有关排序规则的列表,请参阅 Babelfish supported collations table

babelfishpg_tsql.server_collation_name

此参数指定服务器(Aurora PostgreSQL 数据库集群实例)和数据库的原定设置排序规则。默认值为 sql_latin1_general_cp1_ci_asserver_collation_name 必须是一种 CI_AS 排序规则,是因为在 T-SQL 中,服务器排序规则决定了标识符的比较方式。

当您创建 Babelfish 数据库集群时,可以从可供选择的列表中选择 Collation name(排序规则名称)。其中包括 Babelfish supported collations table中列出的排序规则。请勿在 Babelfish 数据库创建之后修改 server_collation_name

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

确定性和非确定性排序规则和 Babelfish

Babelfish 支持确定性和非确定性排序规则:

  • 确定性排序规则 将具有相同字节序列的字符评估为相等。这意味着 xX 在确定性排序规则中是不相等的。确定性的排序规则可以区分大小写 (CS) 且区分重音 (AS)。

  • 非确定性排序规则 不需要完全相同的匹配。非确定性排序规则评估 xX 相等。非确定性排序规则不区分大小写(CI)和/或不区分重音(AI)。

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

Babelfish PostgreSQL

对于 CI_AS 排序规则支持 LIKE 子句。

对于非确定性排序规则不支持 LIKE 子句。

仅在 Babelfish 版本 4.2.0 的以下 AI 排序规则中才支持 LIKE 子句:

  • bbf_unicode_cp1250_ci_ai

  • bbf_unicode_cp1250_cs_ai

  • bbf_unicode_cp1257_ci_ai

  • bbf_unicode_cp1257_cs_ai

  • bbf_unicode_cp1_ci_ai

  • bbf_unicode_cp1_cs_ai

  • estonian_ci_ai

  • finnish_swedish_ci_ai

  • french_ci_ai

  • latin1_general_ci_ai

  • latin1_general_cs_ai

  • modern_spanish_ci_ai

  • polish_ci_ai

  • sql_latin1_general_cp1_ci_ai

  • sql_latin1_general_cp1_cs_ai

  • traditional_spanish_ci_ai

对于非确定性排序规则不支持 LIKE 子句。

有关 Babelfish 与 SQL Server 和 PostgreSQL 相比的其他限制和行为差异的列表,请参阅排序规则限制和行为区别

Babelfish 和 SQL Server 遵循描述排序规则属性的排序规则命名约定,如下表所示。

属性 描述

AI

不区分重音。

AS

区分重音。

BIN2

BIN2 请求按代码点顺序对数据进行排序。Unicode 代码点顺序与 UTF-8、UTF-16 和 UCS-2 编码的字符顺序相同。代码点顺序是一种快速的确定性排序规则。

CI

不区分大小写。

CS

区分大小写。

PREF

要在小写字母之前对大写字母进行排序,请使用 PREF 排序规则。如果比较不区分大小写,在没有其他区别的情况下,字母的大写版本排序将在小写版本之前。ICU 库支持带有 colCaseFirst=upper 的大写字母首选项,但不适用于 CI_AS 排序规则。

PREF 只能应用于 CS_AS 确定性排序规则。

Babelfish 支持的排序规则

将以下排序规则用作服务器排序规则或对象排序规则。

排序规则 ID 注意

bbf_unicode_general_ci_as

支持不区分大小写的比较和 LIKE 运算符。

bbf_unicode_cp1_ci_as

非确定性排序规则也被称为 CP1252。

bbf_unicode_CP1250_ci_as

非确定性排序规则用于表示使用拉丁文字的中欧和东欧语言的文本。

bbf_unicode_CP1251_ci_as

使用西里尔文字的语言的非确定性排序规则

bbf_unicode_cp1253_ci_as

用于代表现代希腊语的非确定性排序规则

bbf_unicode_cp1254_ci_as

支持土耳其语的非确定性排序规则

bbf_unicode_cp1255_ci_as

支持希伯来语的非确定性排序规则

bbf_unicode_cp1256_ci_as

用来编写使用阿拉伯文字的语言的非确定性排序规则

bbf_unicode_cp1257_ci_as

用于支持爱沙尼亚语、拉脱维亚语和立陶宛语的非确定性排序规则

bbf_unicode_cp1258_ci_as

用于编写越南语字符的非确定性排序规则

bbf_unicode_cp874_ci_as

用于编写泰语字符的非确定性排序规则

sql_latin1_general_cp1250_ci_as

用来表示拉丁字符的非确定性单字节字符编码

sql_latin1_general_cp1251_ci_as

支持拉丁字符的非确定性排序规则

sql_latin1_general_cp1_ci_as

支持拉丁字符的非确定性排序规则

sql_latin1_general_cp1253_ci_as

支持拉丁字符的非确定性排序规则

sql_latin1_general_cp1254_ci_as

支持拉丁字符的非确定性排序规则

sql_latin1_general_cp1255_ci_as

支持拉丁字符的非确定性排序规则

sql_latin1_general_cp1256_ci_as

支持拉丁字符的非确定性排序规则

sql_latin1_general_cp1257_ci_as

支持拉丁字符的非确定性排序规则

sql_latin1_general_cp1258_ci_as

支持拉丁字符的非确定性排序规则

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

支持越南语的非确定性排序规则。

您可以将以下排序规则作为对象排序规则。

方言 确定性选项 非确定性选项

阿拉伯语

Arabic_CS_AS

Arabic_CI_AS

Arabic_CI_AI

阿拉伯语文字

BBF_Unicode_CP1256_CS_AS

BBF_Unicode_Pref_CP1256_CS_AS

BBF_Unicode_CP1256_CI_AI

BBF_Unicode_CP1256_CS_AI

二元

latin1_general_bin2

BBF_Unicode_BIN2

使用拉丁字母的中欧和东欧语言

BBF_Unicode_CP1250_CS_AS

BBF_Unicode_Pref_CP1250_CS_AS

BBF_Unicode_CP1250_CI_AI

BBF_Unicode_CP1250_CS_AI

中文

Chinese_PRC_CS_AS

Chinese_PRC_CI_AS

Chinese_PRC_CI_AI

Cyrillic_General

Cyrillic_General_CS_AS

Cyrillic_General_CI_AS

Cyrillic_General_CI_AI

西里尔文字

BBF_Unicode_CP1251_CS_AS

BBF_Unicode_Pref_CP1251_CS_AS

BBF_Unicode_CP1251_CI_AI

BBF_Unicode_CP1251_CS_AI

爱沙尼亚语

Estonian_CS_AS

Estonian_CI_AS

Estonian_CI_AI

爱沙尼亚语、拉脱维亚语和立陶宛语

BBF_Unicode_CP1257_CS_AS

BBF_Unicode_Pref_CP1257_CS_AS

BBF_Unicode_CP1257_CI_AI

BBF_Unicode_CP1257_CS_AI

Finnish_Swedish

Finnish_Swedish_CS_AS

Finnish_Swedish_CI_AS

Finnish_Swedish_CI_AI

French

French_CS_AS

French_CI_AS

French_CI_AI

希腊语

Greek_CS_AS

Greek_CI_AS

Greek_CI_AI

希伯来语

BBF_Unicode_CP1255_CS_AS

BBF_Unicode_Pref_CP1255_CS_AS

Hebrew_CS_AS

BBF_Unicode_CP1255_CI_AI

BBF_Unicode_CP1255_CS_AI

Hebrew_CI_AS

Hebrew_CI_AI

日语(Babelfish 2.1.0 及更高版本)

Japanese_CS_AS

Japanese_CI_AI

Japanese_CI_AS

Korean_Wamsung

Korean_Wamsung_CS_AS

Korean_Wamsung_CI_AS

Korean_Wamsung_CI_AI

代码页 CP1252 的拉丁字符

latin1_general_cs_as

BBF_Unicode_General_CS_AS

BBF_Unicode_General_Pref_CS_AS

BBF_Unicode_Pref_CP1_CS_AS

BBF_Unicode_CP1_CS_AS

latin1_general_ci_as

latin1_general_ci_ai

latin1_general_cs_ai

BBF_Unicode_General_CI_AI

BBF_Unicode_General_CS_AI

BBF_Unicode_CP1_CI_AI

BBF_Unicode_CP1_CS_AI

现代希腊语

BBF_Unicode_CP1253_CS_AS

BBF_Unicode_Pref_CP1253_CS_AS

BBF_Unicode_CP1253_CI_AI

BBF_Unicode_CP1253_CS_AI

Modern_Spanish

Modern_Spanish_CS_AS

Modern_Spanish_CI_AS

Modern_Spanish_CI_AI

蒙古语

Mongolian_CS_AS

Mongolian_CI_AS

Mongolian_CI_AI

波兰语

Polish_CS_AS

Polish_CI_AS

Polish_CI_AI

泰语

BBF_Unicode_CP874_CS_AS

BBF_Unicode_Pref_CP874_CS_AS

Thai_CS_AS

BBF_Unicode_CP874_CI_AI

BBF_Unicode_CP874_CS_AI

Thai_CI_AS、Thai_CI_AI

Traditional_Spanish

Traditional_Spanish_CS_AS

Traditional_Spanish_CI_AS

Traditional_Spanish_CI_AI

土耳其语

BBF_Unicode_CP1254_CS_AS

BBF_Unicode_Pref_CP1254_CS_AS

Turkish_CS_AS

BBF_Unicode_CP1254_CI_AI

BBF_Unicode_CP1254_CS_AI

Turkish_CI_AS、Turkish_CI_AI

乌克兰语

Ukranian_CS_AS

Ukranian_CI_AS

Ukranian_CI_AI

越南语

BBF_Unicode_CP1258_CS_AS

BBF_Unicode_Pref_CP1258_CS_AS

Vietnamese_CS_AS

BBF_Unicode_CP1258_CI_AI

BBF_Unicode_CP1258_CS_AI

Vietnamese_CI_AS

Vietnamese_CI_AI

Babelfish 中的原定设置排序规则

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