Pomocí explicitního nastavení collation lze jednoduše udělat vyhledávání nezávislé na diakritice a velkých/malých písmenech:
SELECT 'Ano!' WHERE ('ABCacžžzř' COLLATE Latin1_General_CI_AI LIKE 'abcáčžzžr' COLLATE Latin1_General_CI_AI)
Celý tento způsob má několik problematických otazníků, které jsem zatím neprobádal:
- není mi úplně jasné, jaký je vztah mezi collation a indexy, v mém konkrétním případě nedošlo ke změně execution planu a operace zůstala „Clustered Index Scan“.
- není mi úplně jasné, proč některé collation fungují, a některé ne – např. „Czech_CI_AI“ mi očekávané výsledky nedávalo.
Update: Czech_CI_AI
Po letech jsem se dopátral, jak je to s Czech_CI_AI. Věc se má tak, že v češtině jsou C-Č, D-Ď, R-Ř, … různá písmena (na rozdíl od A-Á, E-Ě, …) a collation Czech_CI_AI to důsledně rozlišuje (na rozdíl od Latin1_General_CI_AI).
Ad „není mi úplně jasné, jaký je vztah mezi collation a indexy“:
Mám za to, že collation definuje řazení i porovnávání. Takže pokud máš shodnou collation na sloupci při vytváření indexu a collation, podle které vyhledáváš, tak to index kvalifikuje k použití range scanu. Pokud se index použil jako index scan, tak bych hledal problém spíš třeba v množství dat nebo jiném vlivu na query. Zkusím to ověřit a sepsat.
To se mi líbíTo se mi líbí
Díky. Díky. Díky…!
To se mi líbíTo se mi líbí