我正在尝试使用geohash(由于我使用的框架,我不能使用postgres gis中的geo方法,所以只能手动使用)。
为此,我在postgres(geoHash text default ''::text not null
)中有一个列来存储该值。
现在来谈谈问题:假设我的列包含值c28xzxe29h
,我尝试使用以下查询查询该记录:geoHash <= 'c28x~'
,但是它没有返回预期的值(select 'c28xzxe29h' <= 'c28x~';
返回False
)。但是,这个查询在firestore中以及在例如javascript中执行时都可以正常工作(在这两种情况下都包含条目/返回true)。我还用rust测试了它(println!("{}", "c28xzxe29h" <= "c28x~");
返回true
:所以不知道为什么所有的编程语言似乎都同意,而postgres却不同意。
问题是如何让postgres返回期望的值(我使用geofire-commons
生成查询范围,在某些情况下,这些查询范围会显示~
字符)。
1条答案
按热度按时间o8x7eapl1#
字符串的排序取决于所使用的排序规则。不同的人类语言有不同的排序规则。也许你提到的所有其他编程语言都使用C排序规则,要么是因为它们被配置为默认的排序规则,要么是因为这是它们唯一知道如何做的事情。
如果您告诉PostgreSQL使用C排序规则,PostgreSQL将返回true:
如果需要,可以将此归类设置为默认归类。