Диакритический бесчувственный поиск mysql?

Как сделать диакритический бесчувственный,

с этой персидской струной с диакритикой

هواى بر آفتاب بارز

это не то же самое, что с удаленной диакритикой в ​​mySql

هواى بر آفتاب بارز

Есть ли способ сказать mysql игнорировать диакритические знаки или мне нужно удалить все диакритики в моих полях вручную?

Это немного похоже на проблему нечувствительности к регистру.

SELECT * FROM blah WHERE UPPER(foo) = "THOMAS" 

Перед тем, как сравнивать, просто преобразуйте обе строки в диакритические.

Я использую utf8 (utf8_general_ci), и поиск арабика без диакритики не работает, он не чувствителен или не работает, но не работает должным образом.

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

Я думаю об использовании hex и replace (много замены) для поиска слов при фильтрации диакритики.

мое решение иметь нечувствительный поиск арабских слов:

 SELECT arabic_word FROM Word WHERE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(HEX(REPLACE( arabic_word, "-", "")), "D98E", ""), "D98B", ""), "D98F", ""), "D98C", ""),"D991",""),"D992",""),"D990",""),"D98D","") LIKE ?', '%'.$search.'%' 

значения, отформатированные в шестнадцатеричном формате, являются диакритическими, которые мы хотим фильтровать. уродливый, но я не нашел другого андерсера.

Вы уже прочитали всю поддержку набора символов MySQL, чтобы проверить, нет ли ответа на ваш вопрос? Особо следует понимать сопоставления.

Я догадываюсь, что использование utf8_general_ci может сделать для вас правильное дело

настройка

 set names 'utf8' 

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

Самое чистое решение, к которому я пришел, – это:

 SELECT arabic_word FROM Word WHERE ( arabic_word REGEXP '{$search}' OR SOUNDEX( arabic_word ) = SOUNDEX( '{$search}' ) ); 

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