2013-05-02 21 views
3

根據我的理解,PostgreSQL將排序規則委託給底層操作系統的strcoll()函數,顯然,大多數(如果不是全部的話)Linux安裝利用了標點符號和空格在UTF-8 。在使用語言進行整理時,有沒有辦法讓PostgreSQL不會摺疊標點符號和空格?

例如,我在Postres 9.2在CentOS 6.4

ENCODING='UTF8' 
LC_COLLATE='en_US.UTF8' 
LC_CTYPE='en_US.UTF8' 

數據庫並運行查詢

select * from (values('abc'),('ABC'),('Abc'),('...ABc'),('a BC')) x order by 1; 

的結果是

abc 
a BC 
Abc 
...ABc 
ABC 

的Mac OS X似乎要兌現標點和空格,但後來使用POSIX/C風格排序。一個類似的數據庫在OS X相同的設置,返回

...ABc 
ABC 
Abc 
a BC 
abc 

不管操作系統的,我希望一個適當的歸類,返回(和ICU Demo Project所示)

...ABc 
a BC 
abc 
Abc 
ABC 

有什麼辦法將Postgres安裝在任何操作系統上,特別是Linux上,以便遵守ICU風格的正確排序規則?

回答

1

正如你所指出的,Postgres依賴於操作系統來提供整理,而且Postgres可以做的事情是如何進行整理,而不是直接掛接到ICU。

這樣做已經多年來經常討論的話題,而不是一個簡單的任務:

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

+0

一個選擇,我認爲使用適當整理一個語言創建索引,也許Java的。有沒有關於這方面的見解或警告? – Gregory 2013-05-03 18:46:19

+0

我從來沒有嘗試過,但可能有一種方法可以創建自定義類型,例如ICUString,並在其上創建一個BTree索引。儘管如此,這還是很多工作。 – 2013-05-03 18:53:04

相關問題