Tad*_*iak 2 postgresql collation unicode international-components-unicode
我有这个查询:
SELECT * FROM table ORDER BY label ASC;
Run Code Online (Sandbox Code Playgroud)
由于标签不是英文的,它们没有按正确的顺序排序(以“ö”开头的标签不在底部/末尾)。
因此,我尝试:
SELECT * FROM table ORDER BY label COLLATE "sv-SE" ASC;
SELECT * FROM table ORDER BY label COLLATE "sv_SE" ASC;
Run Code Online (Sandbox Code Playgroud)
这些给出了关于那些不存在的排序规则的错误,这让我感到困惑。
经过一番搜索,我想出了这样做:
SELECT * FROM pg_collation;
Run Code Online (Sandbox Code Playgroud)
这表明它应该是:
sv-SE-x-icu
Run Code Online (Sandbox Code Playgroud)
当我使用该标识符时它起作用了,但是“-x-icu”的东西有什么用?那是怎么回事?我讨厌他们总是不得不弄乱标准的语言环境标识符,所以你永远不能只依赖标准的“language_location”格式。
文档,23.2。校对支持 / 23.2.2.2.2. ICU 整理,指出:
ICU 提供的排序规则是在 SQL 环境中创建的,名称为 BCP 47 语言标记格式,并附加了“私人使用”扩展名 -x-icu,以将它们与 libc 语言环境区分开来。
ICU 是“ Unicode 的国际组件”,根据他们的主页,它是:
ICU 是一套成熟的、广泛使用的 C/C++ 和 Java 库,为软件应用程序提供 Unicode 和全球化支持。ICU 具有广泛的可移植性,可为所有平台以及 C/C++ 和 Java 软件之间的应用程序提供相同的结果。
ICU 在非限制性开源许可下发布,适用于商业软件和其他开源或免费软件。
Unicode 是一种规范,而不是软件,因此多年来每个供应商都自己实现了它,因此几乎没有任何使用排序规则的人会喜欢的一致性。幸运的是,ICU 项目正在被越来越多的供应商实施,这正在改进 Unicode 支持和一致性。如果可用,我希望 ICU 归类是比非 ICU 归类更好的选择。
归档时间: |
|
查看次数: |
411 次 |
最近记录: |