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.

3 Responses to “Szótöredék keresés SQL Serveren - furcsának ható hiba”

  1. Baazska Says:

    Én inkább a Hungarian_Technical_CI_AS collation-t használnám…

  2. Soczó Zsolt Says:

    Jó ötlet, köszi.

  3. Lantos Zoltán Says:

    É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.

Leave a Reply