ActiveRecord中具有LOWER()的不区分大小写的匹配项找不到任何匹配项

时间:2019-07-08 17:58:50

标签: ruby-on-rails postgresql

我正在尝试使用activerecord执行不区分大小写的搜索。但这不起作用。

这是用于macos postgres服务器11.11导轨5.2.1

查询:

Post.joins(:terms, :subcategory, :category).where("LOWER(terms.title) LIKE LOWER('Апелласьон')")

结果: 找到两个帖子

查询:

Post.joins(:terms, :subcategory, :category).where("LOWER(terms.title) LIKE LOWER('апелласьон')")

结果: 帖子数为零

1 个答案:

答案 0 :(得分:1)

在Postgres中这样做可以说明原因。这是一个编码问题,您使用的是西里尔字母A,Rails / Postgres可能正在尝试将其与基本拉丁语A进行比较,从而给您带来意想不到的结果。

SELECT 
    ASCII(LOWER('Апелласьон')),  -- 1072
    ASCII(LOWER('апелласьон')),  -- 1072
    ASCII(LOWER('a')),           -- 97
    ASCII(LOWER('A'))            -- 97

这是每个字符的ASCII码

https://www.codetable.net/decimal/1072

https://www.codetable.net/decimal/97


对Postgres中的字符代码有更多了解的人将不得不给出更有意义的解释。