作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我们用这个简单的例子来说明我面临的问题。
假设这张表:
CREATE TABLE testing1
(
id serial NOT NULL,
word text,
CONSTRAINT testing1_pkey PRIMARY KEY (id)
);
和数据:
insert into testing1 (word) values ('Heliod, God');
insert into testing1 (word) values ('Heliod''s Inter');
insert into testing1 (word) values ('Heliod''s Pilg');
insert into testing1 (word) values ('Heliod, Sun');
然后我想运行此查询以获取按 word
列排序的结果:
SELECT
id, word
FROM testing1
WHERE UPPER(word::text) LIKE UPPER('heliod%')
ORDER BY word asc;
但是看看输出,它不是有序的。我希望行按该顺序排列,使用它们的 ID:2、3、1、4(或者,如果我使用单词的值:Heliod's Inter
、Heliod's Pilg
, Heliod, God
, Heliod, Sun
).这是我得到的:
我认为由于我使用的 WHERE
标准,可能有些东西会混淆 postgresql,但如果我只是按行排序,则会发生以下情况:
我是不是漏掉了什么?我在文档中找不到任何关于对包含引号的值进行排序的内容(我怀疑引号会导致这种行为,因为它们在 postgresql 中具有特殊含义,但我可能是错的)。
我正在为我的数据库使用 UTF-8
编码(虽然不确定它是否重要)并且这个问题发生在 Postgresql 版本 12.7 上。
的输出显示 lc_ctype;
是
"en_GB.UTF-8"
和输出显示 lc_collate;
是
"en_GB.UTF-8"
最佳答案
这是对 en_US.UTF-8 中的行进行排序的正确方法。它用标点符号和空格做“奇怪的”(对习惯 ASCII 的人来说)事情,跳过第一遍,只考虑其他绑定(bind)的值。
如果您不需要这些规则,可以改用 C 排序规则。
关于Postgresql ORDER BY 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68696920/
我是一名优秀的程序员,十分优秀!