Accent sensitive search v 10.1.43-MariaDB-1~bionic
- Honza.Mottl
- Člen | 104
Databaze 10.1.43-MariaDB-1~bionic. Pouzivam collation utf8_czech_ci.
Pri vyhledavani LIKE mi vetsinou vyhovuje hledani bez ohledu na diakritiku
(jmeno LIKE '%jiri%' collate utf8mb4_general_ci)
mi vrati Jiří i Jiřina
Ted bych potreboval na jednom miste hledat s presnou diakritikou, ale
(jmeno LIKE '%Jiří%' collate utf8_czech_ci)
mi take vrati Jiří i Jiřina
Vsude vidim navody jak hledat bez diakritiky. Ale jak vyhledavat, aby se hledalo presne i s diakritikou? Diky
Editoval Honza.Mottl (2. 3. 2020 16:59)
- Honza.Mottl
- Člen | 104
David Matějka napsal(a):
ahoj, zkus
utf8mb4_bin
diky. To uz jsem zkusil a LIKE skonci vzdy jako FALSE a nic se nevybere
- Honza.Mottl
- Člen | 104
Nakonec se mi to podarilo vyresit v databazi. INSTR na rozdil od LIKE hleda s diakritikou.
LIKE neni schopen hledat s diakritikou pro utf8mb4_czech_ci. Doplnovani COLLATE je pro tyto ucely zbytecne. Bylo ale dobre tam ponechat LIKE, protoze to pak je asi 10× rychlejsi.
SELECT gener_obj_sort_jmeno
FROM v_objednavka v
WHERE (gener_obj_sort_jmeno LIKE '%jiří%' collate utf8mb4_general_ci) AND (INSTR(gener_obj_sort_jmeno,'jiří') > 0)
ORDER BY objednavka_id DESC
- Honza.Mottl
- Člen | 104
CZechBoY napsal(a):
LIKE desetkrat rychlejsi? To radsi ani nechci vedet kolik to trvalo bez nej :-))
LIKE je vetsinou nejpomalejsi operace na vyhledavani, proto se misto nej pouziva bud fulltext nebo nejaka databaze, ktera data taha jen z indexu.
:D Nastesti tady nejsou velka data a toto se nepousti tak casto