You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL执行ORDER BY DESC排序结果异常,是否为软件本身Bug?

问题结论

这不是PostgreSQL的Bug,该现象是由数据库默认使用的本地化排序规则(collation)导致的,属于预期内的行为。

原因说明

Ubuntu 20.04默认的UTF-8区域排序规则(如en_US.UTF-8、zh_CN.UTF-8)对字符串排序时遵循以下逻辑,和你预期的排序规则不一致:

  • 数字按单个字符逐个比对,而非按整体数值大小比对:比如testing app 7里的7和testing app 22里的2做比对,字符7的编码值大于2,降序排序时自然会排在更前面
  • 大小写排序优先级符合本地化规则:小写字母t的排序优先级高于大写字母T,所以所有小写开头的testing相关结果都会排在大写开头的Test、Testing结果前面
解决方法

你可以根据需求选择以下任意一种方案修正排序逻辑:

  • 如果需要严格按UTF-8字节编码排序,修改查询语句为:
select name 
from leads_lead as ll 
where ll.branch_id = 14 
order by convert_to(ll.name, 'UTF8') desc;
  • 如果需要实现数字按数值大小排序的效果(PostgreSQL 10+支持ICU排序规则),可指定带数字感知的排序规则:
select name 
from leads_lead as ll 
where ll.branch_id = 14 
order by ll.name collate "en-US-u-kn-true" desc;
  • 如果需要全局生效,可在建库时指定符合你排序预期的collation,无需每次查询额外声明。

内容的提问来源于stack exchange,提问作者uddum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:30:02