Accent sensitive search v 10.1.43-MariaDB-1~bionic

Honza.Mottl
Člen | 104
+
0
-

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)

David Matějka
Moderator | 6445
+
0
-

ahoj, zkus utf8mb4_bin

Honza.Mottl
Člen | 104
+
0
-

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
+
0
-

kdyz to jinak nepujde, budu to halt muset osetrit v php nebo v js

Honza.Mottl
Člen | 104
+
0
-

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
CZechBoY
Člen | 3608
+
0
-

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.

Honza.Mottl
Člen | 104
+
0
-

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