gpt4 book ai didi

sql - 为什么 ruby​​ 对字符串数组的排序不同于 sql 顺序(postgres)?

转载 作者:数据小太阳 更新时间:2023-10-29 07:58:38 25 4
gpt4 key购买 nike

当代码比文字更能说明问题时:

[4] pry> Models::Company.order(:name).select_map(:name)
=> ["Dekker, Jacobs and Bosch", "Koster en Zonen", "Peters-Koster", "Peters, Vries and Smits", "Wal, Linden and Jacobs"]
[5] pry> Models::Company.order(:name).select_map(:name).sort
=> ["Dekker, Jacobs and Bosch", "Koster en Zonen", "Peters, Vries and Smits", "Peters-Koster", "Wal, Linden and Jacobs"]

因此,我的规范随机失败。我可以在比较它们之前对数组进行规范化,如下所示:

result_names.map { |s| s.gsub(/,|-/, '') }

我尝试在 JavaScript 中对同一个数组进行排序,得到的结果与 Ruby 给我的结果相同。我现在想知道,是否有某种排序字符串的标准,或者是实现的细节?

最佳答案

ruby 中基于 ASCII 码的字符串排序行为。

pg 中文本的排序行为取决于您所在区域的当前排序规则。来自 PostgreSQL wiki - Why do my strings sort incorrectly? :

It is not in ASCII/byte order. No, it's not, it's not supposed to be. ASCII is an encoding, not a sort order. If you want this, you can use the C locale, but then you use the ability to non-ASCII characters.

所以在纯 SQL 中按 ASCII 值排序,而不是按照本地语言规则进行适当的本地化排序,您可以使用 COLLATE查询中的子句

order by name COLLATE "C" ASC

您可以使用 SHOW lc_collat​​e; 检查 psql 中的整理设置。

PostgreSQL 使用操作系统排序支持,因此结果可能因主机操作系统而略有不同。某些版本的 Mac OS X 或 BSD 系列操作系统在语言环境定义方面存在问题。

关于sql - 为什么 ruby​​ 对字符串数组的排序不同于 sql 顺序(postgres)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44267483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com