Как сделать диакритический бесчувственный,
с этой персидской струной с диакритикой
هواى بر آفتاب بارز
это не то же самое, что с удаленной диакритикой в 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. Я предполагаю, что это возможно для небольших таблиц, но не для больших наборов данных.