我试着比较PostgreSQL中的字符串。
以下是我执行的查询:
select 'UK (z'>'Ukraine';
这是真的;
然后我尝试以下一个:
select 'UK ('>'Ukraine';
这个返回错误;
我认为,这两个都应该返回false,而在另一个PostgreSQL服务器上,它的行为是正确的。但是主服务器在这样的操作中产生了错误的结果。我做错什么了?
最佳答案
如果您有疑问,请尝试:
SHOW lc_collate;
这将显示默认排序规则。
现在可以在列级别或查询级别指定排序规则。由于您的问题处于查询级别,因此可以:
select 'UK (z'::text > 'Ukraine' COLLATE "C"; -- and
select 'UK (z'::text > 'Ukraine' COLLATE "ucs_basic"; -- both return false
实际发生的情况是,自然语言排序顺序忽略了空格和非字母数字字符,因此第一个是“UKz”是否大于“uken”,第二个是“UK”是否大于“uken”。