Как вы пишете без учета регистра для MySQL и Postgres? - PullRequest
64 голосов
/ 15 октября 2008

Я использую базу данных MySQL для разработки, но развертываю ее в Heroku, которая использует Postgres. Heroku обрабатывает практически все, но мои независимые от регистра слова Like становятся чувствительными к регистру. Я мог бы использовать операторы iLike, но моя локальная база данных MySQL не справляется с этим.

Каков наилучший способ написания запроса без учета регистра, который совместим как с MySQL, так и с Postgres? Или мне нужно написать отдельные операторы Like и iLike в зависимости от базы данных, с которой работает мое приложение?

Ответы [ 11 ]

0 голосов
/ 05 марта 2009

Лучше всего конвертировать в верхний, поскольку он охватывает совместимый синтаксис для 3 наиболее часто используемых серверных баз данных Rails. PostgreSQL, MySQL и SQLite все поддерживают этот синтаксис. У него есть (незначительный) недостаток, заключающийся в том, что вы должны вводить строку поиска в вашем приложении или в строке условий, что делает ее немного уродливой, но я думаю, что совместимость, которую вы получаете, делает ее полезной.

И в MySQL, и в SQLite3 есть оператор LIKE без учета регистра. Только PostgreSQL имеет регистрозависимый оператор LIKE и специфичный для PostgreSQL (согласно инструкции) оператор ILIKE для поиска без учета регистра. Вы можете указать ILIKE вместо LIKE в своих условиях в приложении Rails, но имейте в виду, что приложение перестанет работать под MySQL или SQLite.

Третий вариант - проверить, какой механизм базы данных вы используете, и соответствующим образом изменить строку поиска. Это может быть лучше сделано путем взлома / monkeypatching адаптеров подключения ActiveRecord и заставить адаптер PostgreSQL изменить строку запроса, чтобы заменить «LIKE» на «ILIKE» до выполнения запроса. Это решение, однако, является наиболее запутанным и в свете более простых способов, таких как верхний регистр обоих терминов, я думаю, что это не лишнее усилие (хотя вы получите много коричневых очков за то, что сделаете это таким образом).

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