Gå til innhold

Sorting av æøå i Sql Server


Anbefalte innlegg

Videoannonse
Annonse

Det skyldes at du har valgt en collation på kolonnen/databasen/serveren som sorterer æå etter a og ø etter o.

Jeg gjetter at du (eller noen) har valgt Latin1_General_* collation på server, database eller kolonne.

For å sortere på norsk måte kan du benytte en collation som heter Danish_Norwegian_CI_AS.

 

Hvis du vil sortere etter norske/danske regler så kan du enten endre collation for kolonnen, og da vil spørringer "fungere" uten at du trenger å tenke noe mer på det, eller du kan i spørringen fortelle SQL Server hvordan sortering skal utføres, dvs at du velger hvilken collation som skal brukes. det siste alternativet vil selvfølgelig kreve litt mer CPU ved eksekvering.

 

Husk bare at hvis du skal joine kolonner med forskjellig collation så vil SQL Server klage og si at du må spesifisere hvilken collation som skal benyttes i sammenlikningen. Jeg mener også at det kan hindre SQL Servers i å benytte eventuelle indexer på disse kolonnene.

 

For å endre collation på kolonnenivå: alter table tab99 alter column col99 varchar(?) [not null] collate Danish_Norwegian_CI_AS.

For å benytte en spesifikk collation i en spørring:

select * from tab99 order by col99 collation Danish_Norwegian_CI_AS

select * from tab99 where col99>'ø' collate Danish_Norwegian_CI_AS

select * from tab99 inner join tab98 on tab99.col99=tab98.col98 collate Danish_Norwegian_CI_AS

Lenke til kommentar

ack! Det er nok eg som har satt det opp med globalt SQL_Latin1_General_CP1_CI_AS :(

Er det mogleg å setja ein global verdi på alle kolonner?

Ikke som jeg vet om.

 

Det fungere slik:

Nye databaser blir opprettet med den collation du valgte ved installation av SQL Server, med mindre du spesifikt spesifiserer dette i CREATE DATABASE. Denne collation er satt i model databasen og kan ikke endres.

 

Nye tabeller arver collation fra database hvis du ikke spesifikt definerer hvilken collation du skal bruke.

Eksisterende kolonner vil ikke få endre collation selv om du endre collation til databasen. Skal du endre eksisterende kolonner så må du kjøre ALTER TABLE x ALTER COLUMN y <definisjon> COLLATE ...

 

Et problem med å bruke forskjellig collation på database og server er at temporære tabeller (som opprettes i tempdb og tempdb arver serverens collation) opprettes med en annen collation enn din database med mindre du spesifikt spesifiserer hvilken collation du skal bruke.

 

Å endre collation på serveren er komplisert. MS har en veiledning her: http://msdn.microsoft.com/en-us/library/ms179254.aspx

men jeg tror det vil være enklere å ta full backup alle user databaser, reinstallere SQL Server med riktig collation, og deretter restore databasene.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...