首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres UTF8排序

Postgres UTF8排序
EN

Stack Overflow用户
提问于 2012-03-01 20:08:30
回答 2查看 1.2K关注 0票数 1

我在Postgres中有一个查询,其中我根据varchar字段对少量的行进行排序。Postgres中的UTF8字符串排序似乎有误:

例如:

在UTF-8中'W‘是87,而'g’是103,但是运行SELECT 'W' < 'g';将返回false,而运行SELECT convert_to('W', 'SQL_ASCII') < convert_to('g', 'SQL_ASCII')';将返回true

排序规则为en_US.UTF-8

对这种行为有没有很好的解释?如何避免呢?

EN

回答 2

Stack Overflow用户

发布于 2012-03-01 20:24:46

排序不是基于Unicode代码点的,而是由排序规则定义的。在UTF-8中,我们有'A'<'a'<'B'<'b‘等。

大多数人(除了程序员)都希望有这样的排序。但是你可以在你需要的地方用ASCII来整理。

票数 1
EN

Stack Overflow用户

发布于 2012-03-06 08:44:35

如果您使用的是utf8编码,这将显示一些第一个unicode代码点的ascii排序规则:

代码语言:javascript
复制
select s, chr(s) from generate_series(32, 255) s order by chr(s) collate "C";

现在,pt_BR (巴西葡萄牙语)排序规则也是如此:

代码语言:javascript
复制
select s, chr(s) from generate_series(32, 255) s order by chr(s) collate "pt_BR";

所谓的排序规则(en_US.UTF-8)是点之前的排序规则和点之后的编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9515943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档