Szótöredék keresés SQL Serveren - furcsának ható hiba
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.
May 13th, 2010 at 2:55 pm
Én inkább a Hungarian_Technical_CI_AS collation-t használnám…
May 13th, 2010 at 3:06 pm
Jó ötlet, köszi.
May 17th, 2010 at 8:49 am
É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.