Order By查询忽略标点符号

时间:2009-04-10 12:13:59

标签: sql database postgresql

这是Postgresql。

表中的列包含带标点符号的字符串值。值为“aac”,“。aaa”,“aa_b”等。当在order by子句中指定此列时,结果的顺序几乎是随机的。以句点开头的字符串应该出现在顶部,这不会发生。它们出现在中间的某个地方。

令人惊讶的是,只有一个数据库可以看到此行为。相同的查询在其他主机上的数据库上工作正常。

可能的原因是什么?

2 个答案:

答案 0 :(得分:1)

“order by”(字符串比较)行为取决于the cluster's locale

答案 1 :(得分:0)

首先,检查EXPLAIN并查看它是如何进行排序的。

  • 如果它正在调用用户定义的比较函数,请查看该函数。
  • 如果它正在走一个索引,看看该索引是否使用了错误的排序功能(一个不具有传递性或某些功能)。

如果EXPLAIN没有显示任何奇怪的内容,请检查群集的区域设置 - 也许它正在使用忽略某些字符的区域设置进行比较。