SQL Server-datatyper med eksempler

⚡ Smart opsummering

SQL Server-datatyper definerer den type værdi, en kolonne eller variabel kan gemme, f.eks. heltal, decimaltal, tegn, dato eller binært tal. Valg af den korrekte type håndhæver gyldige data og bruger hukommelsen effektivt.

  • 🔢 Præcis numerisk: bigint, int, smallint, tinyint, bit, decimal, numeric, money og smallmoney gemmer præcise hele og fikskommatal.
  • 〰️ Omtrentlig numerisk: float og real gemmer omtrentlige flydende kommaværdier, der bruges i videnskabelige beregninger.
  • 📅 Dato og tid: datetime, smalldatetime, date, time, datetimeoffset og datetime2 gemmer tidsmæssige værdier.
  • 🔤 Tegn og Unicode: char, varchar og text indeholder tekst; nchar, nvarchar og ntext indeholder Unicode-tekst.
  • Binær og andet: binære, varbinære og billedbaserede koder gemmer bytedata; cursor, xml og uniqueidentifier dækker særlige behov.
  • 🧠 Valg Wisely: At matche hver kolonne med den mindste passende type forbedrer lagringseffektiviteten og dataintegriteten.

SQL Server-datatyper med eksempler

Hvad er datatype?

En datatype i MS SQL Server defineres som den type data, som enhver kolonne eller variabel kan gemme. Det er den type data, som et objekt indeholder, såsom heltal, tegn eller streng. Når man opretter et hvilket som helst bord or variabelUdover at angive navnet, angiver du også den type data, den skal gemme.

Sådan bruges MS SQL datatype

Du skal på forhånd definere, hvilken type data en kolonne eller variabel kan gemme. Bestemmelse af datatypen forhindrer også brugeren i at indtaste uventede eller ugyldige data.

Du kan udnytte hukommelsen effektivt ved at tildele en passende datatype til en variabel eller kolonne, som kun allokerer den nødvendige mængde systemhukommelse til den pågældende kolonnes data.

MS SQL tilbyder en bred vifte af grundlæggende datatyper i SQL for at imødekomme brugernes behov, såsom dato, binær, billeder og mere.

Hvorfor bruge DataTypes?

Overvej eksemplet med en simpel tilmeldingsside til en hjemmesideapplikation. De tre inputfelter er Fornavn, Efternavn og Kontaktnummer.

Her skal vi bemærke, at i virkelige scenarier:

  • "Fornavn/Efternavn" vil altid være alfabetisk.
  • "Kontakt" vil altid være numerisk.

Eksemplet nedenfor illustrerer disse felter på en tilmeldingsformular.

Eksempel på tilmeldingsformular, der definerer for- og efternavn som tegn og kontakt som heltal

Ud fra billedet ovenfor giver det mening at definere "Fornavn/Efternavn" som et tegn og "Kontakt" som et heltal.

Det er tydeligt, at i enhver applikation har alle felter en eller anden type data, for eksempel numeriske, alfabetiske, dato og mange flere.

Bemærk også, at forskellige datatyper har forskellige hukommelseskrav. Derfor giver det mere mening at definere kolonnen eller variablen med den datatype, den skal indeholde, for effektiv udnyttelse af hukommelsen.

Datatype tilgængelig i MS SQL Server

Her er en liste over datatyper for MS SQL Server. MS SQL Server understøtter følgende kategorier af datatyper:

  • Præcis numerisk
  • Cirka numerisk
  • Dato og tid
  • Karakterstrenge
  • Unicode-tegnstrenge
  • Binære strenge
  • Andre datatyper

Diagrammet nedenfor grupperer MS SQL Server-datatyperne i disse kategorier.

Diagramgruppeping MS SQL Server-datatyper i deres syv kategorier

Nøjagtige numeriske datatyper i SQL

Exact numeric har ni underdatatyper i SQL Server. Hver type gemmer hele tal eller tal med faste kommaer inden for et defineret område.

Datatype Beskrivelse Nedre grænse Øverste grænse Hukommelse
bigint Den gemmer hele tal i det angivne interval -2^63 (-9,223,372,036,854,775,808) 2^63−1 (9,223,372,036,854,775,807) 8 bytes
int Den gemmer hele tal i det angivne interval -2^31 (-2,147,483,648) 2^31−1 (2,147,483,647) 4 bytes
smallint Den gemmer hele tal i det angivne interval -2^15 (-32,768) 2^15−1 (32,767) 2 bytes
lillebitte Den gemmer hele tal i det angivne interval 0 255 1 byte
bit Det kan tage 0, 1 eller NULL værdier. 0 1 1 byte / 8-bit kolonne
decimal Anvendes til skala og faste præcisionstal −10^38+1 10^38−1 5 til 17 bytes
numerisk Anvendes til skala og faste præcisionstal −10^38+1 10^38−1 5 til 17 bytes
penge Bruges til monetære data -922,337,203,685,477.5808 + 922,337,203,685,477.5807 8 bytes
småpenge Bruges til monetære data -214,478.3648 + 214,478.3647 4 bytes

Præcise numeriske datatyper i SQL Server med eksempler:

Forespørgsel:

DECLARE @Datatype_Int INT = 2
PRINT @Datatype_Int

Output:

2

Syntaks:

Decimal (P,S)

Her er P præcisionen og S er skalaen.

Forespørgsel:

DECLARE @Datatype_Decimal DECIMAL (3,2) = 2.31
PRINT @Datatype_Decimal

Output:

2.31

Tilnærmede numeriske datatyper i SQL

Den omtrentlige numeriske kategori for SQL omfatter flydende komma- og reelle værdier. Disse datatyper bruges mest i videnskabelige beregninger.

Datatype Beskrivelse Nedre grænse Øverste grænse Hukommelse Precision
flyde(n) Bruges til et flydende præcisionstal −1.79E+308 1.79 308 + Afhænger af værdien af ​​n 15-cifret
ægte Bruges til et flydende præcisionstal −3.40E+38 3.40 38 + 4 bytes 7-cifret

Float-typen bruger følgende syntaks:

Syntax:  FLOAT [(n)]

Her er n antallet af bits, der bruges til at gemme mantissen af ​​det flydende tal i videnskabelig notation. Som standard er værdien af ​​n 53.

Når du definerer en datatype som float, skal n være en værdi mellem 1 og 53. SQL Server behandler n som en af ​​to mulige værdier: hvis 1<=n<=24, behandles n som 24; hvis 25<=n<=53, behandles n som 53.

Eksempel forespørgsel:

DECLARE @Datatype_Float FLOAT(24) = 22.1234
PRINT @Datatype_Float

Output:

22.1234

Dato og klokkeslæt Datatyper i SQL

Denne kategori gemmer data af typen dato og klokkeslæt.

Datatype Beskrivelse Opbevaringsstørrelse Nøjagtighed Nedre rækkevidde Øvre rækkevidde
DateTime Bruges til at angive en dato og tid fra 1. januar 1753 til 31. december 9999. Den har en nøjagtighed på 3.33 millisekunder. 8 bytes Afrundet til trin på .000, .003, .007 1753-01-01 9999-12-31
smalldatetime Bruges til at angive en dato og et klokkeslæt fra 1. januar 1900 til 6. juni 2079. Den har en nøjagtighed på 1 minut. 4 bytes, fast 1 minutter 1900-01-01 2079-06-06
dato Bruges til kun at gemme en dato fra 1. januar 0001 til 31. december 9999 3 bytes, fast 1 dag 0001-01-01 9999-12-31
tid Bruges kun til lagring af tidsværdier med en nøjagtighed på 100 nanosekunder. 5 bytes 100 nanosekunder 00:00:00.0000000 23:59:59.9999999
datotidsforskydning Ligner datetime, men har en tidszoneforskydning 10 bytes 100 nanosekunder 0001-01-01 9999-12-31
dato klokkeslæt 2 Bruges til at angive en dato og tid fra 1. januar 0001 til 31. december 9999 6 bytes 100 nanosekunder 0001-01-01 9999-12-31

Eksempel forespørgsel:

DECLARE @Datatype_Date DATE = '2030-01-01'
PRINT @Datatype_Date

Output:

'2030-01-01'

Tegnstrenge Datatyper i SQL

Denne kategori omhandler tegntyper. Den giver dig mulighed for at definere tegndata med fast og variabel længde. Den har fire slags datatyper. Nedenfor er tegnstrengsdatatyperne med eksempler.

Datatype Beskrivelse Nedre grænse Øverste grænse Hukommelse
char Det er en tegnstreng med en fast bredde. Den gemmer maksimalt 8,000 tegn. 0 tegn 8000 tegn n bytes
VARCHAR Dette er en tegnstreng med variabel bredde. 0 tegn 8000 tegn n bytes + 2 bytes
varchar (maks.) Dette er en tegnstreng med en variabel bredde. Den gemmer maksimalt 1,073,741,824 tegn. 0 tegn 2^31 tegn n bytes + 2 bytes
tekst Dette er en tegnstreng med variabel bredde. Den gemmer maksimalt 2 GB tekstdata. 0 tegn 2,147,483,647 tegn n bytes + 4 bytes

Eksempel forespørgsel:

DECLARE @Datatype_Char VARCHAR(30) = 'This is Character Datatype'
PRINT @Datatype_Char

Output:

Dette er Character Datatype

Unicode-tegnstrenge datatyper i SQL

Denne kategori indeholder hele spektret af Unicode-tegn, der bruger UTF-16-tegnkodningen.

Datatype Beskrivelse Nedre grænse Øverste grænse Hukommelse
nchar Det er en Unicode-streng med fast bredde. 0 tegn 4000 tegn 2 gange n bytes
nvarchar Det er en Unicode-streng med variabel bredde. 0 tegn 4000 tegn 2 gange n bytes + 2 bytes
ntekst Det er en Unicode-streng med variabel bredde. 0 tegn 1,073,741,823 tegn 2 gange snorlængden

Eksempel forespørgsel:

DECLARE @Datatype_nChar VARCHAR(30) = 'This is nCharacter Datatype'
PRINT @Datatype_nChar

Output:

Dette er nCharacter Datatype

Binære strengdatatyper i SQL

Denne kategori indeholder binære strenge med fast og variabel længde.

Datatype Beskrivelse Nedre grænse Øverste grænse Hukommelse
binær Det er en binær streng med fast bredde. Den gemmer maksimalt 8,000 bytes. 0 bytes 8000 bytes n bytes
varbinær Dette er en binær streng med variabel bredde. Den gemmer maksimalt 8,000 bytes. 0 bytes 8000 bytes Den faktiske længde af de indtastede data + 2 bytes
billede Dette er en binær streng med variabel bredde. Den gemmer maksimalt 2 GB. 0 bytes 2,147,483,647 bytes

Eksempel forespørgsel:

DECLARE @Datatype_Binary BINARY(2) = 12;
PRINT @Datatype_Binary

Output:

0x000C

Andre datatyper i SQL

Dette er de andre SQL Server-datatyper, med deres beskrivelser nedenfor:

Datatype Beskrivelse
Cursor Dens output er en kolonne med sp_cursor_list og sp_describe_cursor. Den returnerer navnet på cursorvariablen.
Rækkeversion Den versionsstempler tabelrækker.
Hierarkiid Denne datatype repræsenterer en position i et hierarki.
Unikidentifikator Gemmer et GUID, ofte konverteret fra et tegnudtryk.
SQL_variant Den gemmer værdier af SQL Server-understøttede datatyper.
XML Det gemmer XML-data i en kolonne.
Rumlig geometri type Det repræsenterer data i et fladt koordinatsystem.
Rumlig geografi type Det repræsenterer data i det runde jord-koordinatsystem.
bord Den gemmer et resultatsæt til senere behandling.

Interessante fakta!

  • CHAR-datatypen er hurtigere end VARCHAR-datatypen, når den henter data, fordi dens faste bredde undgår længdebogholderi.ping.

Ofte Stillede Spørgsmål

VARCHAR gemmer ikke-Unicode-tegn med én byte hver, mens NVARCHAR gemmer Unicode-tegn med to bytes hver. Vælg NVARCHAR, når en kolonne skal indeholde flere sprog eller symboler uden for en enkelt tegntabel; ellers bruger VARCHAR mindre lagerplads.

Brug DECIMAL (eller NUMERISK) når værdier skal være nøjagtige, f.eks. penge eller målinger, fordi det gemmer en fast præcision. Brug FLOAT til omtrentlige videnskabelige værdier, hvor små afrundingsforskelle er acceptable, og et meget bredt interval betyder mere end nøjagtighed.

Ja. I SQL Server er DECIMAL og NUMERIC funktionelt identiske. Begge accepterer præcision og skala og gemmer nøjagtige tal med fast komma, så de to nøgleord er udskiftelige. Du kan bruge det navn, dit team foretrækker for at opnå læsbarhed.

CHAR er en type med fast længde, der udfylder kortere værdier med mellemrum, så hver værdi bruger den deklarerede bredde. VARCHAR har variabel længde og gemmer kun de indtastede tegn plus to bytes. Brug CHAR til ensartede koder og VARCHAR til tekst af varierende længde.

Ja. ALTER TABEL tabelnavn ÆNDRE KOLONNE kolonnenavn ny_type ændrer en kolonnedatatype. Ændringen lykkes kun, når eksisterende værdier konverteres korrekt til den nye type; ellers mislykkes den, så test konverteringer og sikkerhedskopier data først.

Almindelig VARCHAR(n) lagrer op til 8,000 tegn. VARCHAR(max) lagrer op til omkring 2 GB (2^31-1 bytes) og er beregnet til stor tekst, der overstiger 8,000 tegn. Brug kun VARCHAR(max), når værdier reelt kan være så store.

Ja. GitHub Copilot kan foreslå kolonnedatatyper og generere DECLARE- og CREATE TABLE-sætninger fra naturligt sproglige prompter. Bekræft altid præcision, skala, længde og Unicode-behov i forhold til dine data, før du anvender forslagene i produktion.

AI- og maskinlæringsværktøjer gennemgår eksempeldata for at anbefale passende typer, præcision og længder, markerer overdimensionerede kolonner, der spilder lagerplads, og registrerer uoverensstemmelser under migreringer. De fremskynder skemadesign, mens udvikleren bekræfter de endelige valg.

Opsummer dette indlæg med: