2013-06-05 95 views
0

我有兩個數據庫,一個在postgresql 8.4上運行,另一個在postgresql 9.1上運行。 兩者都在相同語言環境的CentOS機器上(en_US)。在PostgreSQL 8.4和9.1上比較文本

假設我有一個表,這個數據:

id | description 
1 Morango 
2 CAFÉ 
3 pera 
4 Uva 

奇怪的是,當我運行這樣一個查詢:

SELECT * FROM products WHERE description ~* 'café' 

在8.4的機器我沒有得到任何結果,但在9.1機器上我得到了這一行(CAFÉ)。 顯然它們在如何比較大寫unicode字符方面有所不同。

  1. 有人能給我一些關於這個問題的見解嗎?
  2. 是否可以導致此問題的不同版本Postgresql?
  3. 是否有任何額外的配置可以使兩臺機器的行爲均衡?

UPDATE:這兩個數據庫都是非美國Unicode字符UTF-8

回答

2

不區分大小寫的正則表達式匹配是基本沒有9.0之前支持。

看到這個片段在9.0 release notes

E.14.3.6。功能
[...]
支持特定於區域的使用UTF-8 服務器編碼(湯姆泳道)

區域設置特定的正則表達式的功能包括 不區分大小寫匹配和設置特定的字符類的正則表達式處理。 以前,只有當數據庫使用單字節服務器編碼(如 LATIN1)時,這些功能才能正確地處理非ASCII字符 。除了使用UTF-8的 之外,它們仍然會在多字節編碼方面行爲不當。