Aksan duyarsız mysql search?

5 Cevap php

Nasıl Aksan duyarsız yapabilirim,

aksan ile ex bu farsça dize

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

mySql kaldırılan aksan ile aynı değildir

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

Aksanları görmezden ya da ben elle alanlarında tüm Aksanları kaldırmak zorunda mysql söylüyorum bir yolu var mı?

5 Cevap

Biraz vaka-duyarsızlık sorunu gibi.

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

Sadece iki dizeleri Aksan-free karşılaştırarak önce dönüştürmek.

Ben utf8 (utf8_general_ci) kullanılarak ve aksan olmadan arapça Arıyorum çalışmıyor, bu duyarsız değil ya da ancak düzgün çalışmıyor kalmamasıdır.

Ben Hex kullanarak ve Aksan olmadan karaktere bakarak denedim ve iki ayrı karakter olarak dikkate mysql gibi görünüyor.

Ben Aksanları filtreleme yaparken kelimeleri aramak için (bir sürü) yerine hex kullanma ve değiştirme düşünüyorum.

my solution to have an insensitive search for arabic words:

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.'%'

the values formatted in hexadecimal are diacritics that we want to filter. ugly but I didn't find another anwser.

Zaten sorunun cevabı zaten orada olup olmadığını denetlemek için MySQL Character Set Support tüm okudun mu? Özellikle alfabe anlaşılmalıdır.

Ben vahşi bir tahmin utf8_general_ci kullanarak sizin için doğru olanı yapmak olmasıdır

Ayarı

set names 'utf8'

yapmadan önce bir sorgu genellikle latin aramaları için hile yapar. Ben bu kadar iyi Arapça için çalışıyor emin değilim.

Ben geldim temiz çözüm:

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

Ben SOUNDEX işlevi maliyetlerini kontrol etmedim. Ben bu büyük veri kümeleri için küçük tablolar için olabilir, ama değil sanırım.