SqlServer.no

Datatyper

Det finnes en rekke datatyper i MS SQL Server. Det er viktig å bruke riktig datatype så man ikke bruker mer plass og minne enn det man strengt tatt trenger. Dersom man skal lagre alder holder det lenge å bruke datatypen tinyint da det er svært få som blir over 255 år gamle. Det finnes sikkert mange databaser der alder er angitt med datatype int (det kan jo hende at noen blir mange millioner år gamle!?!). Og dersom du skal lagre et navn så ikke bruk text. Svært få har navn lengre enn 50 tegn og derfor bør man bruke en datatype som ikke nødvendigvis har kapasitet til å lagre en hel bok.

Her er listen over datatyper i MS SQL Server 2000

Datatype Kommentar
bigint Numerisk verdi fra -2^63 til 2^63-1
binary Fast mengde med binære data med max 8000 bytes
bit Numerisk verdi fra 0 til 1 (true/false)
char Fast mengde med tekst med maks 8000 tegn/bytes
datetime Dato og klokkeslett mellom 01.01.1753 til 31.12.9999 med en nøyaktighet ned til 3,33 millisekunder
decimal Desimaltall med fast antall desimaler med en verdi fra -10^38 +1 til 10^38 -1
Float Numerisk verdi mellom -1.79E + 308 og 1.79E + 308
Image Variable mengde med binære data. Maks 2^31 - 1 bytes
int Numerisk data mellom -2^31 og 2^31 - 1 (ca -2 mrd - 2 mrd)
Money Pengebeløp mellom -2^63 og 2^63 - 1
Nchar Fast mengde med Unicode tekst med maks 4000 tegn/bytes
Ntext Variabel mengde med unicode tekst med maks 2^30 - 1 tegn/bytes
numeric Numerisk verdi mellom -10^38 +1 og 10^38 -1
nvarchar Variabel mengde med unicode tekst med maks 8000 tegn/bytes
real Numerisk verdi mellom -3.40E + 38 og 3.40E + 38
smalldatetime Dato og klokkeslett mellom 01.01.1900 til 06.06.2079 med en nøyaktighet ned til 1 minutt
smallint Numerisk data mellom -2^15 og 2^15 - 1 (-32.768 - 32.767)
smallmoney Pengebeløp mellom -214,748.3648 og +214,748.3647
sql_variant En datatype som lagrer verdier av forskjellige typer unntatt text, ntext og timestamp
Table En spesiell datatype til å mellomlagre data for senere prosessering
text Variabel mengde med tekst med maks 2^31 - 1 tegn/bytes
timestamp Et unikt tall som oppdateres for hver gang en rad oppdateres
tinyint Numerisk verdi mellom 0 og 255
uniqueidentifier En globalt unik identifikator
varbinary Variabel mengde med binære data med maks 8000 bytes
Varchar Variabel mengde med tekst med maks 8000 teg/bytes

Forklaring av de mest brukte datatypene. Hvilken skal man velge?

Numeriske datatyper

Når man skal lagre tall trenger man en numerisk datatype. Hvilken av de numeriske datatypene man skal bruke avhenger sterkt av hvordan type data man skal lagre. Det er mange som konsekvent bruker datatype int uansett hvordan tall man skal lagre og det er kanskje ikke nødvendig. Int strekker seg helt opp til ca 2 milliarder og hvis man skal lagre et tall som angir hvor mange elever det er i en skoleklasse, eller hvor mange rss-feed'er en bruker abonnerer på. I veldig mange tilfeller er smallint (strekker seg fra -32.768 - 32.767) mer en stor nok til det meste. Dersom du trenger å lagre desimaler må du bruke feks decimal. Denne datatypen må spesifiseres med hvor mange desimaler den skal lagre.

TinyInt er også en numerisk datatype. Den brukes som regel ikke for å lagre tall, men for å lagre true/false (flag). Et lite tips er at denne datatypen egentlig har 3 ulike verdier. Du kan tillate NULL som verdi på kolonnen. Da har du true/false/NULL.

Lagring av tid

MS Sql har to datatyper for lagrin av tid. DateTime og SmallDateTime. Det er 2 forskjeller på disse. Den ene forskjellen er hvor langt frem og tilbake den strekker seg tidsmessig og hvor nøyaktige de er. DateTime kan lagre datoer helt tilbake til år 1753 og så langt frem som til 9999, mens SmallDateTime går fra 1. januar 1900 til 6. juni 2079.

Hvis du i et brukerregister vil lagre fødselsdato så trenger du ikke noe mer enn SmallDateTime fordi du neppe har medlemmer som er født på 1800-tallet og du trenger mest sannsynlig ikke å lagre datoen med mer nøyaktighet enn minutter. Det samme vil ofte gjelde når du vil lagre data om når en bruker sist logget seg inn, eller når en bruker ble opprettet. SmallDateTime bruker halvparten så mye tildelt plass som DateTime

Lagre tekst

Den mest brukte datatypen for lagring av tekst er varchar. Denne støtter lagring av opptil 8000 tegn, men den støtter ikke arabisk, kinesisk, russisk osv (da trenger du nvarchar). En annen tekst datatype er text. Denne lagrer langt større datamengder, men den har ikke støtte for LIKE nøkkelordet i SQL. Dvs at du ikke kan søke i teksten uten å bruke Index. Hvis du bruker varchar må du angi hvor mange tegn man skal kunne legge inn i den kolonnen. Dette tallet bør være så lite som mulig, men ikke så lite at løsningen vil feile fordi du beregnet feil. Det er feks ingen vits å legge inn varchar(4000) hvis du skal lagre en email-adresse. Men her kan det være lurt å ta i litt dersom det er en ny database for deretter å skalere ned når man kjenner litt bedre til hvilke data som i praksis lagres.

Det kan være lurt å bruke en datatype som er litt større enn man antar for deretter å skalere litt ned etter hvert som man ser hvilke data som faktisk lagres.

Lagre binære data

Lagring av binære data i SQL er et omstridt tema. Grunnen er ytelse. Mange mener at å lese binære data fra SQL er langt mer ressurskrevende enn å lese fra filsystemet. Dette er delvis riktig. I mange tilfeller befinner databasen og websiden seg på to forskjellige servere. Det betyr at eventuelle binære filer først må fraktes fra databaseserveren til webserveren og deretter ut til brukeren. Men fordelene med å lagre filer i SQL er at det er lettere å sette opp god sikkerhet på filene og at det er enklere å bestemme hvilke brukere som har tilgang til hvilke filer. Andre store fordelen er at filer lagret i SQL kommer inn i samme backup-rutiner som resten av databasen. Den siste store fordelen jeg vil nevne her er at det er veldig enkelt å sette opp søk mot filer som er lagret i databasen. SQL støtter søk i en rekke filformater og hvis du har filer som ikke er støttet av Microsoft (feks PDF) så finnes det iFilter som kan installeres for å ordne dette.

Lagring av XML

Tabellen over tar for seg datatyper i MS SQL 2000. I MS SQL 2005 ble det introdusert en ny datatype XML. Man kan fint lagre xml i SQL 2000 som feks varchar, men med datatypen XML kan man bruke XPath for å gjøre spørringer i XML-data i en tabell. Så dersom du lagrer XML i databasen så bruk datatypen XML hvis du har en SQL 2005 Server

Template World
06.02.2012 Faktura1
Desgin by:
Sist oppdatert:
Vi fakturerer med: