postgresql – Postgres订购UTF-8字符
发布时间:2020-12-13 18:06:48 所属栏目:百科 来源:网络整理
导读:我正在构建一个包含我的数据库中的世界语单词的小应用程序,所以我有像?apelojn和brakhorlo?o这样的词,带有“特殊”字符. 使用PostgreSQL 9.4.4我有一个带有以下模式的单词表: lingvoj_dev=# d words Table "public.words" Column | Type | Modifiers------
我正在构建一个包含我的数据库中的世界语单词的小应用程序,所以我有像?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 null Indexes: "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看到?,?和?不等同?
使用整理“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"; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |