2013-05-09 40 views
3

據到PostgreSQL 9.2文檔,如果我比使用C語言環境(的en_US.UTF-8在我的情況),對文本列B樹索引支持查詢,如text_pattern_ops比較器是否理解UTF-8?

SELECT * from my_table WHERE text_col LIKE 'abcd%' 

需要的區域設置爲使用text_pattern_ops像這樣

CREATE INDEX my_idx ON my_table (text_col text_pattern_ops) 

現在部分11.9 of the documentation狀態,這種「逐字符」比較導致創建。這些(非寬)C字符還是比較瞭解UTF-8?

回答

1

好問題,我不能完全肯定,但我試探性的理解是:

這裏PostgreSQL的意思是「真正的人物」(最終多字節),而不是字節。比較「理解UTF-8」總是有或沒有這個特殊索引。

問題是,對於具有特殊(非C)排序規則的語言環境,我們通常希望在執行比較(<,> ...)和排序時遵循這些規則(並調用相應的語言環境庫)。但我們不希望將這些排序規則用於POSIX常規匹配和LIKE模式。因此存在兩種不同類型的文本索引。

+0

謝謝你改進我的問題,以及有關語言環境的解釋。 – user2366646 2013-05-13 06:05:24

1

text_pattern_ops操作符類中的操作符實際上對字符串執行memcmp()操作,因此有關字符的文檔可能會稍微不準確。

但是這並不影響他們是否支持UTF-8的問題。所描述的模式匹配操作的索引確實支持UTF-8。底層的運營商不必擔心編碼。