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 ...