【问题标题】:Postgresql order by returning two different ordersPostgresql 命令通过返回两个不同的命令
【发布时间】:2015-08-10 16:38:44
【问题描述】:

我有一台在测试版上运行的PostgreSQL 服务器和一台在本地运行的服务器。在两者上,我都有一个名为profile 的表,其中有一列名为name 的类型为character varying (255)。我检查了 dbs 是否具有相同的值。

奇怪的是,当我使用order by name ascprofile 表进行选择时,我得到了不同的结果。所以在我的本地数据库上,名称为 (I)Contractor 的配置文件是第一个,而名称为 3B 的 beta 配置文件是第一个。

所以在我的本地数据库中,( 似乎在数字字符之前,反之亦然。知道这是怎么发生的吗?不同版本的 Postgresql 排序规则会不会不同?

【问题讨论】:

  • 两个数据库的编码是否相同?就像 ASCII 与 UTF-8 与其他东西一样?
  • 在两台服务器上运行SHOW LC_COLLATE 命令并比较它们的结果。 LC_COLLATE 参数影响 ORDER BY 中字符串的排序顺序。
  • @kordiko 你是对的。我的价值观是en_US.UTF-8English_United States.1252。谢谢

标签: postgresql sorting sql-order-by


【解决方案1】:

这种行为的原因可能在于两台服务器运行在两个不同的操作系统上(例如 Gnu Linux 和 MS Windows)。排序方法的不同是由于排序是由操作系统提供的。要获得相同的排序顺序,可以使用collate

select name from profile order by name collate "C"

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

【讨论】:

  • 这正是正在发生的事情。我正在使用 Windows,而 beta 服务器在 linux 上。设置collate 修复它!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 2022-01-06
  • 2017-02-15
  • 2020-07-11
  • 1970-01-01
  • 2017-06-03
相关资源
最近更新 更多