Autor Zpráva
MilanKarkulka
Profil
Lépe řečeno, pokud zadám slovo bez diakritiky, tak to nenajde v databázi slova napsaná s diakritikou.

Používám následující kód:

$result = mysql_query("SELECT * FROM xml_join WHERE MATCH(jmeno, description) AGAINST ('$search' IN BOOLEAN MODE) ORDER BY 5 * MATCH(jmeno) AGAINST ('$search') + MATCH(description) AGAINST ('$search') DESC LIMIT 10");
        while ($vypis=mysql_fetch_array($result))
            {
            ...
            }

Pokud zadám vyhledat "růžový", tak to funguje = zobrazí všechny vše, co má v sobě slovo "růžový".
Pokud zadám vyhledat "ruzovy", tak to nefunguje = v databázi není slovo "ruzovy" a slovo "růžový" to nenajde.

Pokud je to relevantní, tak MySQL sloupce mám v utf8_czech_ci.
_es
Profil
MilanKarkulka:
Pokud zadám vyhledat "ruzovy", tak to nefunguje = v databázi není slovo "ruzovy" a slovo "růžový" to nenajde.
A na základe čoho očakávaš, že by to malo nájsť slovo „růžový“, teda niečo iné, než je vo vyhľadávanom texte? „Funguje“ to tak, ako by to podľa dokumentácie MySQL malo fungovať, ak to má fungovať inak, budeš si musieť to iné fungovanie „dorobiť“.
juriad
Profil
_es:
Ono by to mělo fungovat.
sqlfiddle.com/#!9/788a27/1

Zajímavé, že utf8_czech_ci nesplácne „z“ a „ž“. utf8_general_ci už ano.
Vysvětlení: MySQL utf8_czech_ci vs utf8_general_ci
MilanKarkulka
Profil
juriad:
vyzkoušel jsem změnit v databázi sloupce na utf8_general_ci a pořád stejný problém... .

Nešlo by třeba do toho SQL dotazu nějak vyjmenovat, že "Č<=>C" apod.? Nebo to udělat jakkoliv jinak... ? Klidně i nějaké 'prasácké' řešení. (nechci ale mít v databázi duplicitní data bez diakritiky)

Protože pokud ten web bude používaný a vyhledávání bude na webu pravidelně používané, tak do budoucnosti stejně bude muset být vyhledávání nahrazeno nějakým lepším řešením. Nějakým externím search enginem, ne přes MySQL fulltext. Chci to jen momentálně rozchodit a nechat to zatím tak.
juriad
Profil
MilanKarkulka:
O to, která pismenka se mají považovat za stejná, se stará collation.
Tabulka collation-charts.org/mysql60/mysql604.utf8_general_ci.european.html to dobře vysvětluje; pro každý základní znak říká, které další jsou s ním ekvivalentní.

Musíš tedy nějak zajistit, že se použije utf8_general_ci.
MilanKarkulka
Profil
Moc se omlouvám, ono to funguje!

Změnil jsem utf8_czech_ci na utf8_general_ci.

Ale po této úpravě je nutné dané sloupce znovu přidat do FULLTEXT()!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0