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
这有时称为\xe2\x80\x9c自然排序顺序\xe2\x80\x9d。
\n换句话说,de-DE-u-kn-true就是:
de: 语言 德语DE:德国地区u:以下是 Unicode 区域设置扩展kn:Unicode 区域设置扩展数字排序true: 的值kn,表示数字排序已开启