Mysql Search LIKE с дополнительными французскими символами - PullRequest
0 голосов
/ 23 марта 2011

У меня есть имена в базе данных, такие как

tést

Автозаполнение работает нормально, и все, и если я ищу для него, как это:

WHERE title LIKE '%tèst%'

Он работает нормально.Но теперь я также хочу найти эту запись, если пользователь вводит

test

(без акцента).В большинстве случаев это хорошо, так как автозаполнение фиксирует пользователя, но, конечно, не всегда.Как я могу изменить запрос так, чтобы стрелка «test» также нашла «tést» (наоборот не имеет значения)?

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Это работает для меня.

Я проверял это на MySQL 5.5.8, используя кодировку utf8 и сопоставление utf8_general_ci.

Я попытался найти where title like '%tèst%' и where title like '%test%', и оба запроса вернули и "tèst", и "test", что похоже на то, что вы хотите.

Разве это не работает для вас?

mysql> create table french (
    -> title text
    -> ) default charset = utf8, default collate = utf8_general_ci;
Query OK, 0 rows affected (0.13 sec)

mysql> 
mysql> insert into french values ('tèst');
Query OK, 1 row affected (0.00 sec)

mysql> insert into french values ('test');
Query OK, 1 row affected (0.00 sec)

mysql> insert into french values ('toast');
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> select * from french where title like '%tèst%';
+-------+
| title |
+-------+
| tèst  |
| test  |
+-------+
2 rows in set (0.00 sec)

mysql> select * from french where title like '%test%';
+-------+
| title |
+-------+
| tèst  |
| test  |
+-------+
2 rows in set (0.00 sec)
0 голосов
/ 23 марта 2011

Вы можете решить эту проблему с помощью сопоставления.Сопоставления в MySQL определяют, как символы сравниваются друг с другом.Разница «e» и «è» на самом деле является примером, который MySQL использует в своей документации.Каков ваш текущий набор символов и сопоставление?Я далеко не эксперт в этом вопросе, но, возможно, смогу помочь вам указать верное направление в отношении того, какое сопоставление использовать.

0 голосов
/ 23 марта 2011

Поскольку реализация поиска MySQL очень-очень плохая, нет способа сделать это, используя только MySQL. Кстати, вы не используете полнотекстовый поиск (как указано в тегах).

Я бы поместил эту логику в ваше приложение, чтобы он нашел все варианты для этих случаев и добавил их к запросу.

Запрос, который вы получите в конце, может выглядеть так:

WHERE title LIKE '%tèst%' OR title LIKE '%test%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...