PostgreSQL使用捷克排序规则对unicode字符进行了不正确的排序

Ond*_*lda 6 postgresql locale

我有一个表,其排序规则设置为cs_CZ(捷克语):

    Name   | Encoding |  Collation  |    CType
-----------+----------+-------------+-------------
 foo       | UTF8     | cs_CZ.UTF-8 | cs_CZ.UTF-8
Run Code Online (Sandbox Code Playgroud)

但是当我按字符串排序时,结果没有排序,因为它应该根据捷克字母表:

=> SELECT surname FROM foo ORDER BY surname;
     surname     
-----------------
A
Da
?b
Dc
E
Run Code Online (Sandbox Code Playgroud)

所以它的排序就像unicode重音字符(Ď)被转换为没有重音(D)的ASCII版本一样.但捷克语字母是:... C - > D - >Ď - > E ...,所以返回的顺序不正确(在这个例子中它应该是:A - > Da - > Dc - >Ďb - > E ).

这是常见的PostgreSQL行为吗?有没有办法按捷克字母顺序正确排序?

编辑:尝试Postgres 9.1.4,两者都有相同的行为.它是一个Arch Linux机器.
EDIT2:调整后的例子,Ď是真正的问题.

Pav*_*ule 5

它是正确的。á, ?, é, ?, í, ?, ó, ?, ú, ?, ý 的重音应该被忽略,参见文章

捷克排序规则有点复杂:)