指定区域设置:长格式

Vertica 支持指定 collation 关键字的长格式。Vertica 将长格式处理扩展到可以接受排序规则实参。

语法

[language][_script][_country][_variant][@collation‑spec]

参数

language
代表特定语言的小写两字母或三字母代码。例如,西班牙语为 es,英语为 en,法语为 fr。两字母语言代码使用 ISO-639 标准。
_script
可选的四字母脚本代码,跟在语言代码之后。如果指定此项,则此代码应为 Unicode ISO 15924 注册表中列出的有效脚本代码。
_country
通用语言内针对特定国家/地区或区域的特定语言约定。例如,许多国家/地区都说法语,但每个国家/地区的货币是不同的。若要允许特定的地理、政治或文化区域存在这些差异,可通过大写的两字母代码指定区域设置。例如,FR 代表法国,CA 代表加拿大。两字母国家/地区代码使用 ISO-3166 标准。
_variant
同一个国家/地区内使用的语言约定也可能有所不同。例如,有多个欧洲国家/地区使用欧元作为货币,但各个国家/地区的货币仍在流通。若要处理某个语言和国家/地区对内的变化,请添加第三个代码 — 变体代码。变体代码可以是任意代码,完全特定于应用程序。对于那些支持欧元货币的区域设置,ICU 会向其区域设置目标中添加 _EURO。变体可以具有任意数量的带下划线的关键字。例如,EURO_WIN 是 Windows 计算机上欧元货币的变体。

变体代码的另一个用途是指定区域设置的排序规则(排序顺序)。例如,es__TRADITIONAL 区域设置使用传统的排序顺序,该排序顺序与西班牙的默认现代排序不同。

@collation‑spec
Vertica 仅按如下所示支持关键字 collation
@collation=collation‑type[;arg]...

排序规则可以指定一个或多个以分号分隔的实参,如下所述。

排序规则类型 设置为以下值之一:

  • big5han:拉丁文按拼音排序,CJK 字符(在中文中使用)按 big5 字符集排序。

  • dict:字典样式的排序(例如,在僧伽罗语中)。

  • direct:印地语变体。

  • gb2312/gb2312han:拉丁文按拼音排序,CJK 字符(在中文中使用)按 gb2312han 字符集排序。

  • phonebook:电话簿样式的排序(例如,在德语中)。

  • pinyin:拉丁文和 CJK 字符按拼音排序;即,将 CJK 字符逐个字符音译为拼音(在中文中使用)后进行顺序。

  • reformed:改良后的排序规则(例如,在瑞典语中)。

  • standard:每种语言的默认排序。对于 root,其为 [UCA] 顺序;对于每个其他区域设置,其与 UCA(Unicode 排序规则算法)排序相同,只是会对相应语言的某些字符进行适当的修改。下面是某些区域设置的其他选项;它们仅在某些区域设置中有效。

  • stroke:拉丁文按拼音排序,不支持 CJK 字符(在中文中使用)的笔划顺序。

  • traditional:传统样式的排序(例如,在西班牙语中)。

  • unihan:拉丁文按拼音排序,不支持 CJK 字符(在中文中使用)的 Unihan 部首笔划排序。

  • binary:Vertica 默认,提供 UTF-8 八位字节排序。

注意:

  • 排序规则可能默认为 root(ICU 默认排序规则)。

  • 排序规则关键字及其同义词的值无效不会导致错误。例如,以下代码不会生成错误,只是会忽略无效值:

    => \locale en_GB@collation=xyz
    INFO 2567:  Canonical locale: 'en_GB@collation=xyz'
    Standard collation: 'LEN'
    English (United Kingdom, collation=xyz)
    

有关排序选项的详细信息,请参阅 Unicode 区域设置数据标记语言 (LDML)

排序规则实参

collation 可以指定以下一个或多个实参:

区域设置处理说明

  • 如果前缀可被解析为已知的区域设置版本,则会接受错误的区域设置字符串。

    例如,以下代码有效,因为可对语言进行解析:

    => \locale en_XX
    INFO 2567:  Canonical locale: 'en_XX'
    Standard collation: 'LEN'
    English (XX)
    

    以下代码无效,因为无法对语言进行解析:

    => \locale xx_XX
    xx_XX: invalid locale identifier
    
  • en_US.UTF-8 之类的 POSIX 类型区域设置在忽略编码部分“UTF-8”时有效。

  • Vertica 使用 icu4c-4_2_1 库及某些扩展来支持基本的区域设置/排序规则处理。这不满足 当前的区域设置处理标准:(https://tools.ietf.org/html/rfc5646)。

示例

使用 phonebook 样式的排序规则指定德国使用的德国区域设置 (de):

=> \locale de_DE@collation=phonebook
INFO 2567:  Canonical locale: 'de_DE@collation=phonebook'
Standard collation: 'KPHONEBOOK_LDE'
German (Germany, collation=Phonebook Sort Order)
Deutsch (Deutschland, Sortierung=Telefonbuch-Sortierregeln)

指定德国使用的德国区域设置 (de),其中 phonebook 样式的排序规则和强度设置为“次要 (secondary)”:

=> \locale de_DE@collation=phonebook;colStrength=secondary
INFO 2567:  Canonical locale: 'de_DE@collation=phonebook'
Standard collation: 'KPHONEBOOK_LDE_S2'
German (Germany, collation=Phonebook Sort Order)
Deutsch (Deutschland, Sortierung=Telefonbuch-Sortierregeln)