ceturtdiena, 2011. gada 16. jūnijs

Kārtošana un kolācijas

Mūsu alfabēts ir 'a', 'ā', 'b', 'c', 'č', ..., 'ž'. Kārtojot datus SQL Server, tas ne vienmēr tiek ņemts vērā.

Lai īsāk, uzreiz piemērs:
create table #t
(
      x char(10)
)
insert into #t (x) values ('a')
insert into #t (x) values ('ab')
insert into #t (x) values ('ā')
insert into #t (x) values ('āb')
insert into #t (x) values ('k')
insert into #t (x) values ('ka')
insert into #t (x) values ('ķ')
insert into #t (x) values ('ķa')

Select * From #t Order By X
Vai var pateikt, kā dati tiks sakārtoti? Mēģināt jau var..

Tomēr lai atbildētu, būtu jāzina kāda ir SQL Server (un līdz ar to TempDB) kolācija. Šajā gadījumā tiek izmantota Latvian_CI_AS kolācija.

Pēc manas izpratnes- šajā gadījumā datiem būtu jābūt sakārtotiem tieši tā, kā tie tiek ievietoti tabulā. Tomēr rezultāti ir savādāki:
Kā redzams, burtu 'k' un 'ķ' gadījumā viss ir sakārtots tā, kā jābūt, savukārt 'a' un 'ā' kārtojot tiek uzskatīti kā vienādi burti.

Šajā gadījumā piemērs ir apzināti darbināts uz SQL Server 2008 R2. Līdz ar to ir pieejamas arī jaunās SQL Server kolācijas (tās, kurām nosaukumā ir paslēpies '100'). Izmantojot jaunās kolācijas, sakārtojums kļūst korekts:

Vēl viens iemesls padomāt, kādas kolācijas izmantot.

5 komentāri:

  1. >> savukārt 'a' un 'ā' kārtojot tiek uzskatīti kā vienādi burti.

    Tas ir korekti, jo šāds kārtošanas princips latviešu valodā ir pieņemts. Man gan pašam patīk, ka a un ā tiek nodalīts, bet nu tādi standarti ir pieņemti un tam ir savs pamatojums.

    AtbildētDzēst
  2. Ja tas ir korekts, kāpēc tas neattiecas uz 'k' un 'ķ' burtiem šajā pašā piemērā? Un ja standarts, tad kāpēc pieņemtais standarts netiek turpināts jaunajās kolācijās?

    AtbildētDzēst
  3. Kolācija nav tas pats, kas alfabētiskā secība. Bieži tiek nodalīta primārā prioritāte (k un ķ) un sekundārā (a un ā). Iespējams, ka latviešu kolāciju veidotāji neiedziļinās šādās niansēs. Pajautā labāk, kāpēc, piemēram, Word joprojām liek nepareizās latviešu pēdiņas. ;)

    AtbildētDzēst
  4. Tas gan, kolācija nav tas pats, kas alfabētiskā kārtība (ja pareizi atceros, Poļiem 'ch' tiek uzskatīti par atsevišķu kārtojamu simbolu pāri).

    Starp citu- interesanti, uz mana Win 7 attiecīgi nosaukti faili tiek sakārtoti a->ab->ā->āb, kamēr Win XP sakārto a->ā->ab->āb

    AtbildētDzēst
  5. Normāli jau būtu, ja varētu lietot vienu vai otru kolāciju pēc izvēles.

    AtbildētDzēst