Нечувствительный к акценту поисковый запрос в MySQL - PullRequest
20 голосов
/ 27 декабря 2011

Есть ли способ сделать нечувствительным к ударению поисковый запрос?

параметры сортировки столбца и таблицы - utf8_polish_ci, и я не хочу их менять.

пример слова: toruń

select * from pages where title like '%torun%'

Не находит "toruń".Как я могу это сделать?

Ответы [ 3 ]

21 голосов
/ 28 декабря 2011

Вы можете изменить параметры сортировки во время выполнения в запросе sql,

...where title like '%torun%' collate utf8_general_ci

, но имейте в виду, что изменение параметров сортировки на лету во время выполнения исключает возможность mysql с использованием индекса, поэтому производительность на больших таблицах можетбыть ужасным.

Или вы можете скопировать столбец в другой столбец, например searchable_title, но изменить параметры сортировки.Обычно это делается, когда вы копируете данные, но сохраняете их в несколько иной форме, оптимизированной для определенной рабочей нагрузки / цели.Вы можете использовать триггеры как хороший способ синхронизировать дублированные столбцы.Этот метод может хорошо работать, если он проиндексирован.

Примечание. Убедитесь, что в вашей БД действительно есть эти символы, а не объекты html.Кроме того, набор символов вашей связи имеет значение.Выше предполагается, что он установлен в utf8, например, через набор имен , как set names utf8

Если нет, вам нужен вводчик для литерального значения

...where title like _utf8'%torun%' collate utf8_general_ci

и, конечно же, значение в одинарных кавычках должно быть действительно в кодировке utf8, даже если остальная часть запроса sql - нет.

5 голосов
/ 28 декабря 2011

Это не будет работать в экстремальных условиях, но попробуйте изменить параметры сортировки столбцов на UFT8 utf8_unicode_ci. Тогда акцентированные персонажи будут равны своим не акцентированным аналогам.

1 голос
/ 28 декабря 2011

Вы можете попробовать SOUNDEX:

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex

Сравнивает две строки по их звучанию.Но это, очевидно, дает гораздо больше результатов.

...