【问题标题】:Postgres Strings comparison peculiarityPostgres 字符串比较特性
【发布时间】:2014-02-17 02:30:18
【问题描述】:

谁能解释下面的矛盾?

select 'b.0'<'b00.0';
 ?column?
----------
 t

但是

select 'b.g'<'b00.g';
 ?column?
----------
 f

【问题讨论】:

  • 要详细说明@Clodoaldo 的答案,您的语言的排序规则可能适用于此处。如果不知道你的数据库是什么语言,就很难准确地说出什么;显示\l databasename
  • @Craig Ringer SHOW lc_collate; 返回en_US.UTF8

标签: postgresql


【解决方案1】:

那是collation issue。试试

select '.0' < '00', '.9' < '00', '.9' < '00' collate "C";
 ?column? | ?column? | ?column? 
----------+----------+----------
 t        | f        | t

http://wiki.postgresql.org/wiki/Todo:ICU

【讨论】:

  • 我知道“C”排序规则按 ASCII 排序,但我想知道另一种排序的逻辑是什么
  • @Dikla PostgreSQL 使用操作系统的排序规则支持进行排序。你在什么操作系统上?众所周知,Mac OS X 的排序规则有些乏味,其他平台往往相当合理。我不知道 en_US 排序规则,所以我不确定 en_US 是否会出现这个结果。
  • @CraigRinger,有趣,我认为它与操作系统无关。我正在使用 debian wheezy。
  • @Dikla 检查维基链接和my not that old question
  • @Dikla 我希望是这样,但事实证明做得好非常痛苦。顺便说一句,将 echo -e 'b.g\nb00.g' | LC_ALL=en_US.UTF-8 sort 与相同的命令与 LC_ALL=C 进行比较 - 确认它是操作系统级别的排序规则,而不是 Pg。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
相关资源
最近更新 更多