ActiveRecord "lower(column_name)" по-прежнему чувствителен к регистру. (MySql2, Rails)

Я использую MySql2 в моем приложении Rails. Я пытаюсь сделать запрос activerecord, который возвращает все записи, которые указали поля, содержащие строку. Я прочитал, что уменьшая ввод, а затем с помощью lower(column_name) LIKE 'string' должен сделать свое дело, но это не похоже на работу. Мой запрос точно таков:

search = params[:search].to_s.downcase

@current_user.patients.where("lower(last_name) LIKE ? OR lower(first_name) LIKE ? OR lower(identifier) LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%")

Допустим, у меня есть запись с фамилией "Эбботт". Когда моим поисковым параметром является "Abb" или "бот", эта запись возвращается. Однако, когда параметром поиска является "abb" или "Bot", ничего не возвращается. Похоже, что запрос все еще чувствителен к регистру??

Я огляделся и не могу найти ответ. Я прочитал несколько раз, что lower(column_name) должно работать, но это не так.

Любая помощь приветствуется. Спасибо!

1 ответ

Решение

Я понял. Это было действительно потому, что поля были сохранены как двоичные значения (спасибо Винсенту). Приведя двоичные поля в виде CHAR, я смог сравнить их без учета регистра:

@current_user.patients.where("CAST(last_name AS CHAR) LIKE ? OR ...

Другие вопросы по тегам