2014-01-26 39 views
2

任何人都可以解釋下列矛盾嗎?Postgres字符串比較特性

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

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

爲了詳細說明@ Clodo阿爾的答案,你的語言的排序規則可能適用於此。如果不知道你的數據庫使用的是什麼語言,那很難說清楚什麼;顯示'\ l databasename'。 –

+0

@Craig Ringer'SHOW lc_collat​​e;'''returns'en_US.UTF8' – Dikla

回答

2

這是一個collation issue。嘗試

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

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

+0

據我所知,「C」排序規則用ASCII明顯排序,但我想知道其他排序的邏輯是什麼 – Dikla

+0

@Dikla PostgreSQL使用操作系統的排序規則支持排序。你在什麼操作系統上?已知Mac OS X的排序規則有些偏差,其他平臺往往相當合理。我不知道en_US排序規則是否在我的頭頂,所以我不確定這個結果是否可以預期或不適用於en_US。 –

+0

@CraigRinger,有趣,我以爲它是獨立於操作系統的。 我正在使用debian wheezy。 – Dikla