排序规则“de-DE-u-kn-true”到底意味着什么

Dom*_*nik 4 sql postgresql collation

为了对带有数值的 PostgreSQL 14 varchar 列进行排序,我使用了由

CREATE COLLATION de_pos (LOCALE = 'de-DE-u-kn-true', PROVIDER = 'icu');`
Run Code Online (Sandbox Code Playgroud)

使用这样的排序规则 ORDER BY 会产生正确的顺序,如下所示
1.2.10
1.2.20
1.2.100

如果没有该特殊排序规则,ORDER BY 结果为
1.2.10
1.2.100
1.2.20

我想知道该排序规则定义的每个部分到底意味着什么?

de-DE => 德语-德国的语言环境
u => UTF8 ????
知道=>????
真=> ????

Mar*_*eel 14

请参阅PostgreSQL 文档中的ICU 排序规则。这链接到 ICU 文档,该文档(通过一些间接方式)导致Unicode 区域设置标识符,这清楚地表明-u引入了 Unicode 区域设置扩展,并且kn是这些扩展之一。当您查看排序规则设置时,您会发现kn配置数字排序。这true是该选项的配置(意味着数字排序已打开):

\n
\n

如果设置为on,则任何十进制数字序列([UAX44] 中的 General_Category =\nNd)都将以其数值\n在主要级别进行排序。例如,“A-21”<“A-123”。计算出的主要权重\n均位于数字重新排序组的开头。因此,对于未定制的 UCA 表,“a$” < “a0” < “a2” < “a12” < “a\xe2\x93\xaa” < “aa”。

\n
\n

这有时称为\xe2\x80\x9c自然排序顺序\xe2\x80\x9d。

\n

换句话说,de-DE-u-kn-true就是:

\n
    \n
  • de: 语言 德语
  • \n
  • DE:德国地区
  • \n
  • u:以下是 Unicode 区域设置扩展
  • \n
  • kn:Unicode 区域设置扩展数字排序
  • \n
  • true: 的值kn,表示数字排序已开启
  • \n
\n