2010-09-21 49 views
1

我嘗試比較PostgreSQL中的字符串。PosqtgreSQL字符串比較

這裏是我執行查詢:

select 'UK (z'>'Ukraine'; 

這一個返回true;

然後我嘗試以下之一:

select 'UK ('>'Ukraine'; 

這一個返回false;

我認爲,這兩個應該返回false,並在另一個PostgreSQL服務器上表現正確。但是主服務器在這樣的操作中產生不正確的結果。我究竟做錯了什麼?

+1

這兩臺機器上的語言環境(整理)? – 2010-09-21 13:54:20

+0

錯誤的 - UTF8,正確 - 俄羅斯俄羅斯1251 – akvakh 2010-09-22 07:16:28

回答

1

如果您有任何疑問嘗試:

SHOW lc_collate; 

這將顯示您的默認排序規則。

現在您可以在列級別或查詢級別指定排序規則。由於您的問題是,在查詢級別,您可以:

select 'UK (z'::text > 'Ukraine' COLLATE "C"; -- and 
select 'UK (z'::text > 'Ukraine' COLLATE "ucs_basic"; -- both return false 

什麼實際發生的自然語言整理順序忽略空格和非字母數字字符,所以第一個是「UKZ」>「烏克蘭」是否它是,其次是「英國」是否大於「烏克蘭」,而不是。

+0

+1,雖然_「自然語言整理順序忽略空白和非字母數字字符」_是一個巨大的簡化。 'SELECT'UK(z'>'UK z';'和'SELECT'UK z'>'UKz''確實返回'true'。 – 2013-03-17 13:43:57