Акцент нечувствительный поисковый запрос в MySQL

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

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

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

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

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

3 ответов


вы можете изменить параметры сортировки во время выполнения в 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-запроса не является.


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


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

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

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