我正在尝试使用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('апелласьон')")
结果: 帖子数为零
答案 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中的字符代码有更多了解的人将不得不给出更有意义的解释。