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.

May 13, 2010 / by Zsolt Soczó

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.

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

  • Baazska May 13, 2010

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

  • Soczó Zsolt May 13, 2010

    Jó ötlet, köszi.

  • Lantos Zoltán May 17, 2010

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

  • Kovács Zsolt April 20, 2012

    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.