utf8_bin против utf8_general_ci нечувствительность к регистру

у меня возникла проблема с немецким umlaute ä ö ü … при использовании сопоставления в моем запросе sql

когда я ищу «Apfel«Я тоже получаю»Apfel» когда используешь utf8_general_ci но я хочу просто получить «Apfel«Теперь, когда я перехожу на utf8_bin я получаю именно это НО его чувствительный к регистру. так Apfel или же Apfel не найдете äpfel или же Apfel

мне понадобится utf8_bin_ci что на самом деле не существует, я предполагаю?

использование utf8_bin с соответствием и нижним значением (поле) или lcase (поле) оказывается с ошибкой, так что …. что я могу сделать, чтобы решить эту проблему?

запрос похож;

select * FROM table where MATCH(field) AGAINST ('äpfel')

и что мне нужно, но не работает

select * FROM table where MATCH(lcase(field)) AGAINST ('äpfel')

в utf8_bin

1

Решение

Звучит так, как вам нужно utf8_bin_ci но не существует, только utf8_bin делает.

Если вы хотите добавить нечувствительность к регистру, вам нужно добавить LOWER() для обоих элементов, таких как:

mysql> SELECT LOWER('Äpfel') = LOWER('äpfel') COLLATE utf8_bin;
+----------------------------------------------------+
| LOWER('Äpfel') = LOWER('äpfel') COLLATE utf8_bin   |
+----------------------------------------------------+
|                                                  1 |
+----------------------------------------------------+
1 row in set (0.00 sec)

-> expected resultmysql> SELECT LOWER('Äpfel') = LOWER('apfel') COLLATE utf8_bin;
+---------------------------------------------------+
| LOWER('Äpfel') = LOWER('apfel') COLLATE utf8_bin  |
+---------------------------------------------------+
|                                                 0 |
+---------------------------------------------------+
1 row in set (0.00 sec)

-> expected result as well

Обновление: Также, пожалуйста, посмотрите на этот интересный аналогичный ответ: utf8_bin против utf_unicode_ci

0

Другие решения

Увы, вы получаете выбор между сравнением битов (без складывания или без акцента) с ..._bin или как складной, так и с акцентом ..._ci Параметры сортировки.

это предоставляет информацию о том, какие символы эквивалентны или нет. Например, в utf8_german2_ciони рассматриваются как равные:

    A=a=ª=À=Á=Â=Ã=Å=à=á=â=ã=å=Ā=ā=Ą=ą

Но они приходят позже при сортировке:

    ae=Ä=Æ=ä=æ

Отметить: _general_ci никогда не рассматривает двухбуквенную пару как равную одному символу, следовательно ae а также æ обязательно неравны в utf8_general_ci,

0