Есть ли способ заставить чувствительность к регистру в MySQL / Rails для одного поиска? - PullRequest
8 голосов
/ 05 ноября 2008

Я занимаюсь поиском по тегам, и некоторым пользователям нравится «кошка», а другим нравится «Кошка».

В любом случае, есть ли способ заставить конкретную находку учитывать регистр? Такие как:

Tag.find(:some-special-option-here)

Есть идеи?

Ответы [ 3 ]

25 голосов
/ 05 ноября 2008

Вы также можете выполнять поиск с учетом регистра без изменения свойств столбца.

SELECT * FROM mytable WHERE myfield='Value' 

Этот запрос соответствует:

  • Значение
  • значение
  • VALUE
  • значение
  • и т. Д.

Хотя ...

SELECT * FROM mytable WHERE BINARY myfield='Value'

Только совпадения:

  • Значение
4 голосов
/ 19 января 2009

Вы можете сделать все строки чувствительными к регистру при создании таблицы, добавив «COLLATE utf8_bin» в строку: options при создании таблицы. Например:

create_table( "page_infos", :force => true, :options => "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin") do |t|
      t.string   "title",       :limit => 120
end
2 голосов
/ 05 ноября 2008

В базе данных mysql установите тип данных вашего текста на utf_collate_bin. Например:

ALTER TABLE `sets` CHANGE `set_name` `set_name` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

Где 'sets' - это таблица, 'set_name' - это столбец типа VARCHAR (64). Вы также можете сделать это в PhpMyAdmin ..

Любой двоичный код выполнит работу; но utf8 предпочтительнее.

Если вам интересно, что такое _ci в конце вашего текущего сопоставления, это означает «без учета регистра»: p

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