Autor Zpráva
T-fon
Profil
když mám jednoduchý dotaz:
SELECT nazev, text FROM test WHERE MATCH(nazev) AGAINST('slovo')
jak se řeší, aby mi to vyhledalo slova s diakritikou i bez (např. když zadám "priklad", aby mi to našlo i slovo "příklad"?
mám na mysli něco jako COLLATE utf8_general_ci když se použije LIKE
Tori
Profil
Pokud je u sloupce nazev nastavené porovnávání utf8_unicode_ci nebo utf8_general_ci, tak by to mělo fungovat přesně jak chcete. Na jak velkém vzorku dat to zkoušíte? U hledání IN NATURAL LANGUAGE MODE (= implicitní varianta) platí práh 50%: pokud se hledané slovo vyskytuje ve více než polovině řádků, bere se jako stopword (jak je to vlastně česky?). Zkuste tohle - pokud vám to něco najde, tak je problém v malém vzorku zkušebních dat a/nebo se hledané slovo vyskytuje příliš často.SELECT nazev, text FROM test WHERE MATCH(nazev) AGAINST('slovo' IN BOOLEAN MODE)

Ještě přidám odkaz na přehled porovnávání v MySQL: http://www.collation-charts.org/mysql60/
T-fon
Profil
Tori:
díky, já právě používám czech_ci kváli řazení. Teď jsem ještě pátral a našel jsem právě to co píšete, že bych mel nastavit u sloupců general_ci, to jsem vyzkoušel a funguje to. Tzn. předpokládám správně, že s czech_ci nemám šanci?
Tori
Profil
T-fon:
Koukněte se na ty tabulky jednotlivých porovnávání, z toho je jasně vidět, které znaky se berou jako jeden (jestli C == Č nebo ne). Zkuste, o kolik by bylo pomalejší, kdyby ten sloupec měl porovnávání unicode/general a řadil by se ORDER BY nazev COLLATE utf8_czech_ci. Sama to používám, ale jen na malé tabulce (cca 2000 řádků) a už si nepamatuju jestli a jak velký tam byl rozdíl. (ale kdyby byl velký tak bych to řešila asi jinak)
T-fon
Profil
Tori:
OK, to se zdá jako dobrý řešení, tabulka nebude mít víc než 2000 řádků. Ještě jednou díky.

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