Поиск в базе данных с учетом регистра с помощью Active Record - PullRequest
0 голосов
/ 18 сентября 2018

Предоставляет ли Active Record способ генерировать SQL, который заставляет текстовый поиск учитывать регистр?

Генераторы Ruby-on-Rails, которым поручено создать столбец строкового типа, создают простое поле VARCHAR(255) в базе данных mysql. Оказывается, что запросов по таким столбцам нечувствительны к регистру по умолчанию .

Таким образом, поиск активной записи, такой как:

Secret.where(token: 'abcde')

будет сопоставлять записи с токенами abcde, ABcdE и т. Д.

Без изменения базового столбца базы данных (например, с указанием параметров сортировки utf8_bin) поиск можно сделать чувствительным к регистру, явно настроив условие where:

Secret.where('binary token = ?', 'abcde')

Тем не менее, это зависит от базы данных, и мне интересно, есть ли у Active Record идиома, чтобы выполнить то же самое для любой базы данных. Например, нечто, напоминающее конструкцию where.not:

Secret.where.binary(token: 'abcde')

Разве это не было бы достаточно распространенной потребностью?

1 Ответ

0 голосов
/ 26 сентября 2018

Короче говоря: НЕТ ActiveRecord идиома для поиска по регистру - .


Для поиска по регистру - без учета поиск вы можетепопробуйте использовать это .Это все еще работает, но исходный код был немного изменен.Поэтому используйте его на свой страх и риск.

В общем случае чувствительность к регистру является подмножеством Collation идиома.И разные СУБД используют очень разные сопоставления по умолчанию для строковых (текстовых) типов данных, включая регистр по умолчанию чувствительность . Подробное описание для MySQL.

Существует оператор sql COLLATE, который очень распространен в СУБД (но, похоже, все еще не в стандарте SQL).Но ActiveRecord источники показывают это только в коде создания схемы.Ни ActiveRecord, ни Arel гемы не используют COLLATE в where поиске (грустно).

Примечание: Пожалуйста, не пропустите тег базы данных (mysql и т. Д.) В вопросе.Существует много Вопросов и Ответов по SO без тегов (или с sql one), которые совершенно не имеют отношения к большинству СУБД, кроме авторской.

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