Функция поиска с греческими символами в MySQL - PullRequest
2 голосов
/ 18 июня 2011

У меня есть функция поиска для старых греческих слов ( Wearch.nl ).
Старые греческие слова имеют многократные акценты, ῦ не совпадает с ὐ, но я хочу, чтобы, если вы наберете«и» вы получите результаты для ῦ и ὐ (и 5 других вариантов).Я использую функцию LIKE MySQL, чтобы получить результаты.
Я мог бы найти их все, но я надеюсь, что это может быть короче и быстрее.

1 Ответ

2 голосов
/ 18 июня 2011

Если вы можете изменить набор символов вашего столбца (или таблицы), установите для него значение utf8_general_ci ( ссылка на руководство ):

ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8_general_ci;

С этим набором символов (который не учитывает регистр, как обозначено _ci), акцентированные символы имеют одинаковый вес (значение, используемое для сопоставление ), поэтому они возвращают true при сравнении друг с другом ( ссылка на руководство ):

В сопоставлениях, не входящих в UCA, один на один отображение из кода символа в вес. В MySQL такие сопоставления случаются нечувствительный и нечувствительный к акценту. utf8_general_ci является примером: «а», «А», «А» и «А» имеют разные коды символов, но все имеют вес 0x0041 и сравните как равное.

mysql> SET NAMES 'utf8' COLLATE 'utf8_general_ci';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT 'a' = 'A', 'a' = 'À', 'a' = 'á';
+-----------+-----------+-----------+
| 'a' = 'A' | 'a' = 'À' | 'a' = 'á' |
+-----------+-----------+-----------+
|         1 |         1 |         1 |
+-----------+-----------+-----------+
1 row in set (0.06 sec)

В качестве альтернативы, или если вы не можете изменить конфигурацию базы данных таким образом, вы можете написать функцию для замены акцентированных символов их неакцентированными эквивалентами (т.е. é -> e) и записать это в выделенный поиск поле (рекомендуется полнотекстовый поиск поле). Выполните поиск в этом поле и верните акцентированное поле в приложение.

...