Соответствие без учета регистра в ActiveRecord с LOWER () не находит совпадений - PullRequest
1 голос
/ 08 июля 2019

Я пытаюсь выполнить поиск без учета регистра, используя activerecord. Но это не работает.

это для macos postgres server 11.11 rails 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 Ответ

1 голос
/ 08 июля 2019

Выполнение этого в 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 должен будет дать более осмысленное объяснение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...