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