Az alábbi kérdezték tőlem pár perce:
SELECT [text] FROM [table1] WHERE [text] like '%rekes%'
A rekesz szót nem találja meg, ha magyar a collation az oszlopon. Ez természetes, a kettős betűket ezzel a logikával kezeli a szerver, azaz egy betűnek tekinti őket. A where-be kell egy collation cast, mondjuk latin1-re, amiben nincsenek kettős betűk. Mondjuk ezután nem fog indexet használni a szerver, de a kezdő % miatt eleve nem használva.
Az alábbi példában az egyikkel collationnel megtalálja, másikkal nem.
SELECT [text] FROM [table1] WHERE [text] like '%rekes%' -- collate Hungarian_CI_AS collate Latin1_General_CI_AS
Lehet csinálni indexelt, számított oszlopot is más collationnel, és arra szűrni, az gyorsabb lesz.
Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.
LEAVE A COMMENT
4 COMMENTS
Én inkább a Hungarian_Technical_CI_AS collation-t használnám…
Jó ötlet, köszi.
Érdemes az egész adatbázist átrakni Hungarian_Technical_CI_AS-be vagy a fenti példa is megteszi?
Van más eltérés is a technical-ban? pl.: rendezésnél vagy az ékezetes karakterek keresésénél?
thx.
Collation-al kapcsolatban még egy dolgot én is megjegyznék :)
Egyszer találkoztam azzal a hibával, hogy az oszlop neve kettős betűt tartalmazott, de nagyon okosan így írták: “MisZol”.
A collation “SQL_Hungarian_CP1250_CI_AS” volt és csak úgy fogadta el az oszlopnevet, ha a “z” nagy “Z”-nek volt írva a query-ben, egyébként hibát dobott, hogy nem létező oszlop.
A megoldás a Technical collation vagy az oszlop átnevezése (amelyik szimpatikusabb) volt.