postgresql – Postgres订购UTF-8字符

postgresql – Postgres订购UTF-8字符,第1张

概述我正在构建一个包含我的数据库中的世界语单词的小应用程序,所以我有像ĉapelojn和brakhorloĝo这样的词,带有“特殊”字符. 使用PostgreSQL 9.4.4我有一个带有以下模式的单词表: lingvoj_dev=# \d words Table "public.words" Column | 我正在构建一个包含我的数据库中的世界语单词的小应用程序,所以我有像ĉapelojn和brakhorloĝo这样的词,带有“特殊”字符.

使用Postgresql 9.4.4我有一个带有以下模式的单词表:

lingvoj_dev=# \d words                                      table "public.words"   Column    |            Type             |                     ModifIErs-------------+-----------------------------+---------------------------------------------------- ID          | integer                     | not null default nextval('words_ID_seq'::regclass) translated  | character varying(255)      | meaning     | character varying(255)      | times_seen  | integer                     | inserted_at | timestamp without time zone | not null updated_at  | timestamp without time zone | not nullIndexes:    "words_pkey" PRIMARY KEY,btree (ID)

但是以下查询给出了一些奇怪的输出:

lingvoj_dev=# SELECT w."translated" FROM "words" AS w ORDER BY w."translated" desc limit 10; translated------------ ĉu ŝi ĝi ĉevaloj ĉapelojn ĉapeloj ĉambro vostojn volas viro(10 rows)

排序是不一致的 – 我可以使用以特殊字符开头的所有单词,但是所有以ĉ开头的单词应该组合在一起,而不是!为什么ŝi和ĝi介于ĉu和ĉevaloj之间?

服务器编码为UTF8,排序规则为en_AU.UTF-8.

编辑:看起来它将所有特殊字符排序为等效字符 – 它根据每个单词中的第二个字符正确排序.如何使Postgresql看到ĉ,ŝ和ĝ不等同?

I’d be okay with all of the words starting with special characters
being at the end…

使用整理“C”:

SELECT w."translated" FROM "words" AS w ORDER BY w."translated" collate "C" desc limit 10;

另见Different behaviour in “order by” clause: Oracle vs. PostgreSQL

使用ORM查询可能会有问题.解决方案可以是使用选项LC_ColLATE = C(在注释中建议的OP)重新创建数据库.还有一个选项 – 更改单个列的排序规则:

ALTER table "words" ALTER ColUMN "translated" TYPE text ColLATE "C";
总结

以上是内存溢出为你收集整理的postgresql – Postgres订购UTF-8字符全部内容,希望文章能够帮你解决postgresql – Postgres订购UTF-8字符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1181533.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存