2011-11-03 197 views
3

顯然PostgreSQL自8.4版以來爲每個數據庫提供了不同的語言環境 所以我去了文檔閱讀有關語言環境(http://www.postgresql.org/docs/8.4/static/ locale.html)。 (我想把字符串排序爲'A b c D d'而不是'A B C ... Z a b c')。字符串排序順序(LC_COLLATE和LC_CTYPE)

問題1:創建數據庫時,我只需要設置LC_COLLATE(字符串排序順序)嗎?

我也讀到LC_CTYPE(字符分類(什麼是字母其大寫當量)?)

問題二:誰能解釋這是什麼意思?

回答

2

您描述的排序順序是大多數語言環境中的標準。 試試看自己:

SELECT regexp_split_to_table('D d a A c b', ' ') ORDER BY 1; 

當你初始化你的數據庫集羣initdb你可以可以選擇一個區域與--locale=some_locale。在我的情況下,它是--locale=de_AT.UTF-8。如果您沒有指定區域設置從環境繼承的任何內容 - 則將使用您當前的系統區域設置。

集羣的模板數據庫將被設置爲該語言環境。當您創建新數據庫時,它會繼承模板中的設置。通常你不必擔心什麼東西,這一切正常。

閱讀關於CREATE DATABASE的章節瞭解更多信息。 如果您想加快索引文字搜索速度,請務必閱讀operator classes
所有指向版本8.4的鏈接,就像你特別要求的那樣。


的PostgreSQL 9.1或更高,有collation support,允許更靈活地使用歸類:

覈對特徵允許指定的排序順序和數據的字符 分類行爲per-列,甚至是每個操作。 這可以緩解LC_COLLATE和LC_CTYPE設置創建後無法更改其限制。

-1

與其他數據庫相比,PostgreSQL在區分大小寫方面更加嚴格。

SELECT * FROM users ORDER BY LOWER(last_name), LOWER(first_name); 

如果你有大量的數據,這將是低效的跨越整個表每次這樣做,你要顯示的記錄列表:訂貨時,您可以使用字符串函數,使之區分大小寫避免這種情況。另一種方法是使用citext module,它提供了一種在進行比較時內部不區分大小寫的類型。

獎勵:

搜索過的時候,在這你可以接觸到這個問題是有區分大小寫的模式匹配操作:

SELECT * FROM users WHERE first_name ILIKE "%john%";