Акцент нечувствительный поисковый запрос в 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
Это сравнивает две строки по тому, как они звучат. Но это, очевидно, дает гораздо больше результатов.