Подтвердить что ты не робот

Бесконфликтный поисковый запрос в MySQL

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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