siDDis Skrevet 16. april 2010 Del Skrevet 16. april 2010 Eg ser at SQL Server her sorterer ø etter o og å etter a. Er det mogleg å få dette til å bli meir "norsk"? Lenke til kommentar
thomasmarthinsen Skrevet 16. april 2010 Del Skrevet 16. april 2010 Hvilket character set bruker du? Lenke til kommentar
kaffenils Skrevet 16. april 2010 Del Skrevet 16. april 2010 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
siDDis Skrevet 16. april 2010 Forfatter Del Skrevet 16. april 2010 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? Lenke til kommentar
kaffenils Skrevet 16. april 2010 Del Skrevet 16. april 2010 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
siDDis Skrevet 16. april 2010 Forfatter Del Skrevet 16. april 2010 Ok, då er det ikkje så krise. Får notere det ned i produksjonsplanen til når eg skal installere databasen på produksjonsmiljøet. Takk for hjelpa! Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå