PosqtgreSQL字符串比较

问题描述:

我尝试比较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

如果您有任何疑问尝试:

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