gpt4 book ai didi

sql - Postgresql 排序语言特定字符(排序规则)

转载 作者:行者123 更新时间:2023-11-29 11:25:24 24 4
gpt4 key购买 nike

我,作为一个有几个不常见字符如ÕÜÖÄ的语言的使用者,认为如果我创建一个应用程序,允许用户将爱沙尼亚语的内容保存到数据库,那么这个应用程序也应该能够对数据进行排序根据语言设置正确。

此外,作为一种非常小的语言,如爱沙尼亚语,必须考虑其他人可能会使用该应用程序并希望使用他们的语言进行排序。几种欧洲语言也有自己的特殊字符组合。

更糟糕的是,如果您将俄语等语言混入其中 - 它们具有完全不同的字符。

现在,因为我知道 django 站点可以很好地显示所有这些特殊字符,所以我只担心在数据库级别进行的排序。那么我如何确保从数据库中读取对象并将其排序为正确的、特定于语言的顺序。

示例案例:如果我使用 utf8 编码和默认排序规则(英语 utf8)创建数据库,则包含值的表

alan
oskar
ölen
älan
öskar

将被排序(通过“select * from test order by nimi asc;”)到:

alan
älan
ölen
oskar
öskar

这是不正确的。如果我使用 POSIX 排序规则创建数据库,则相同的查询结果为:

alan
oskar
älan
ölen
öskar

这看起来是正确的,因为如果您将更多的名字(õlan、ålan)放入组合中,那么结果是:

alan
oskar
älan
ålan
õlan
ölen
öskar

因为,根据爱沙尼亚字母表,它们应该是:

alan
oskar
õlan
älan
ölen
öskar
ålan (cause å is not in estonian alphabet)

我正在使用 postgresql 9.1.9,我知道排序支持自 9.1 ( http://www.postgresql.org/docs/9.1/interactive/collation.html ) 起可用。

这是我应该使用的吗?

SELECT nimi COLLATE "et_EE" FROM test ORDER BY nimi ASC;

失败并出现错误错误:编码“UTF8”的排序规则“et_EE.utf8”不存在。这是为什么?我是否必须创建此归类规则或其他内容?这是要走的路吗 - 如果我希望结果顺序正确,则为每个查询指定排序规则?

艾伦

编辑 :1 来回答问题:我的语言环境 -a 显示:

C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
et_EE
et_EE.iso88591
et_EE.utf8
POSIX
zh_CN.utf8
zh_SG.utf8

sudo locale-gen et_EE.UTF-8
[sudo] password for alan:
Generating locales...
et_EE.UTF-8... up-to-date
Generation complete.
sudo locale-gen et_EE
Generating locales...
et_EE.ISO-8859-1... up-to-date
Generation complete.

SQL 仍然失败

Edit2:我想我明白了。我也必须在 postgresql 中创建排序规则本身 ( http://www.postgresql.org/docs/9.1/static/sql-createcollation.html ):

CREATE COLLATION "et_EE" (LOCALE = "et_EE.utf8")

所以我想我必须创建那些你告诉我的 shell 语言环境文件,zero323,然后创建数据库的排序规则,然后我就准备好了。

最佳答案

您可以使用以下方法检查已安装的语言环境:

locale -a

如果未列出 et_EE,请运行此命令:

sudo locale-gen et_EE
sudo locale-gen et_EE.UTF-8
sudo update-locale

然后再次尝试您的查询。

关于sql - Postgresql 排序语言特定字符(排序规则),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18932922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com