SQL Serveri andmetüübid koos näidetega

⚡ Nutikas kokkuvõte

SQL Serveri andmetüübid määravad, millist tüüpi väärtusi veerg või muutuja saab salvestada, näiteks täisarv, kümnend-, märgi-, kuupäeva- või kahendsüsteem. Õige tüübi valimine tagab kehtivate andmete esitamise ja kasutab mälu tõhusalt.

  • 🔢 Täpne arv: bigint, int, smallint, tinyint, bit, decimal, numeric, money ja smallmoney salvestavad täpseid täis- ja fikseeritud komaarve.
  • 〰️ Ligikaudne numbriline: float ja real salvestavad teaduslikes arvutustes kasutatavaid ligikaudseid ujukoma väärtusi.
  • 📅 Päev ja aeg: Datetime, smalldatetime, date, time, datetimeoffset ja datetime2 salvestavad ajalisi väärtusi.
  • 🔤 Tähemärk ja Unicode: char, varchar ja text hoiavad teksti; nchar, nvarchar ja ntext hoiavad Unicode'i teksti.
  • 🖼️ Binaarne ja muu: Binaar-, muutuvbinaar- ja pildivormingud salvestavad baitiandmeid; kursor, XML ja uniqueididentifier katavad erivajadused.
  • 🧠 Valimine Wisely: Iga veeru sobitamine väikseima sobiva tüübiga parandab salvestustõhusust ja andmete terviklikkust.

SQL Serveri andmetüübid koos näidetega

Mis on andmetüüp?

Andmetüüp MS SQL Server on defineeritud kui andmetüüp, mida mis tahes veerg või muutuja saab salvestada. See on andmetüüp, mida objekt hoiab, näiteks täisarv, märk või string. Mis tahes loomisel tabel or muutujaLisaks nime määramisele saate määrata ka salvestatavate andmete tüübi.

Kuidas kasutada MS SQL andmetüüpi

Veerg või muutuja peab eelnevalt määratlema andmetüübi, mida see salvestada saab. Andmetüübi määramine piirab ka kasutaja poolt ootamatute või sobimatute andmete sisestamist.

Mälu saab tõhusalt kasutada, määrates muutujale või veerule sobiva andmetüübi, mis eraldab selle veeru andmete jaoks ainult vajaliku hulga süsteemimälu.

MS SQL pakub laia valikut põhilisi andmetüüpe SQL vastavalt kasutaja vajadustele, näiteks kuupäev, binaarfailid, pildid ja palju muud.

Miks kasutada andmetüüpe?

Vaatleme lihtsa veebirakenduse registreerimislehe näidet. Kolm sisestusvälja on eesnimi, perekonnanimi ja kontaktnumber.

Siinkohal peaksime märkima, et reaalsetes olukordades:

  • „Ees-/perekonnanimi” on alati tähestikulises järjekorras.
  • „Kontakt” on alati numbriline.

Allolev näide illustreerib neid välju registreerumisvormil.

Näide registreerimisvormist, kus ees- ja perekonnanimi on määratletud tähemärkidena ning kontakt täisarvuna

Ülaltoodud pildilt on mõistlik defineerida „Ees-/perekonnanimi“ tähemärgina ja „Kontakt“ täisarvuna.

On ilmne, et igas rakenduses on kõigil väljadel üht või teist tüüpi andmed, näiteks numbrilised, tähestikulised, kuupäevalised ja palju muud.

Samuti pange tähele, et erinevatel andmetüüpidel on erinevad mälunõuded. Seetõttu on mälu tõhusaks kasutamiseks mõistlikum defineerida veerg või muutuja andmetüübi järgi, mida see hoiab.

Andmetüüp on saadaval MS SQL Serveris

Siin on MS SQL Serveri andmetüüpide loend. MS SQL Server toetab järgmisi andmetüüpide kategooriaid:

  • Täpne arv
  • Ligikaudne arv
  • Kuupäev ja kellaaeg
  • Tähemärgi stringid
  • Unicode'i märgistringid
  • Binaarsed stringid
  • Muud andmetüübid

Allolev diagramm rühmitab MS SQL Serveri andmetüübid nendesse kategooriatesse.

Diagrammi rühmping MS SQL Serveri andmetüübid seitsmesse kategooriasse jaotatud

Täpsed numbrilised andmetüübid SQL-is

Täpsel numbrilisel tüübil on SQL Serveris üheksa alamandmetüüpi. Igaüks neist salvestab täis- või fikseeritud komaarvud määratletud vahemikus.

Andmetüüp Kirjeldus Madalam limiit Ülemine piir Mälu
bigint See salvestab täisarvud antud vahemikus −2^63 (−9,223,372,036,854,775,808 XNUMX) 2^63−1 (32 767) 8 baiti
int See salvestab täisarvud antud vahemikus −2^31 (−2,147,483,648 XNUMX) 2^31−1 (32 767) 4 baiti
smallint See salvestab täisarvud antud vahemikus −2^15 (−32,768 XNUMX) 2^15−1 (32 767) 2 baiti
tilluke See salvestab täisarvud antud vahemikus 0 255 1 bait
natuke See võib võtta 0, 1 või NULL väärtusi. 0 1 1 bait / 8-bitine veerg
Kümnendkoht Kasutatakse skaala ja fikseeritud täppisnumbrite jaoks −10^38+1 10^38−1 5 kuni 17 baiti
arv- Kasutatakse skaala ja fikseeritud täppisnumbrite jaoks −10^38+1 10^38−1 5 kuni 17 baiti
raha Kasutatakse rahaliste andmete jaoks -922,337,203,685,477.5808 + 922,337,203,685,477.5807 8 baiti
väike raha Kasutatakse rahaliste andmete jaoks -214,478.3648 + 214,478.3647 4 baiti

Täpsed numbrilised andmetüübid SQL Serveris koos näidetega:

Päring:

DECLARE @Datatype_Int INT = 2
PRINT @Datatype_Int

Väljund:

2

süntaksit:

Decimal (P,S)

Siin on P täpsus ja S skaala.

Päring:

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

Väljund:

2.31

Ligikaudsed numbrilised andmetüübid SQL-is

SQL-i ligikaudsete numbriliste andmete kategooria hõlmab ujukoma- ja reaalväärtusi. Neid andmetüüpe kasutatakse enamasti teaduslikes arvutustes.

Andmetüüp Kirjeldus Madalam limiit Ülemine piir Mälu Täpsus
ujuki (n) Kasutatakse ujuva täppisarvu jaoks −1.79E+308 1.79 + 308 Sõltub n väärtusest 15-kohaline
reaalne Kasutatakse ujuva täppisarvu jaoks −3.40E+38 3.40 + 38 4 baiti 7-kohaline

Ujuktüüpi puhul kasutatakse järgmist süntaksit:

Syntax:  FLOAT [(n)]

Siin on n teaduslikus tähistuses ujukomaarvu mantissi salvestamiseks kasutatavate bittide arv. Vaikimisi on n väärtus 53.

Kui defineerite andmetüübi, näiteks float, peaks n olema väärtus vahemikus 1 kuni 53. SQL Server käsitleb n-i ühena kahest võimalikust väärtusest: kui 1<=n<=24, käsitletakse n-i kui 24; kui 25<=n<=53, käsitletakse n-i kui 53.

Näidispäring:

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

Väljund:

22.1234

Kuupäeva ja kellaaja andmetüübid SQL-is

See kategooria salvestab kuupäeva ja kellaaja tüüpi andmeid.

Andmetüüp Kirjeldus Ladustamise suurus Täpsus Alumine vahemik Ülemine vahemik
Kuupäev Kellaaeg Kasutatakse kuupäeva ja kellaaja määramiseks 1. jaanuarist 1753 kuni 31. detsembrini 9999. Selle täpsus on 3.33 millisekundit. 8 baiti Ümardatud sammudeni 000, 003, 007 1753-01-01 9999-12-31
väike kuupäev Kasutatakse kuupäeva ja kellaaja määramiseks 1. jaanuarist 1900 kuni 6. juunini 2079. Selle täpsus on 1 minut. 4 baiti, fikseeritud 1 minuti 1900-01-01 2079-06-06
andmed Kasutatakse ainult kuupäeva salvestamiseks 1. jaanuarist 0001 kuni 31. detsembrini 9999 3 baiti, fikseeritud 1 päev 0001-01-01 9999-12-31
aeg Kasutatakse ainult ajaväärtuste salvestamiseks täpsusega 100 nanosekundit. 5 baiti 100 XNUMX XNUMX nanosekundit 00:00:00.0000000 23:59:59.9999999
datetimeoffset Sarnane kuupäeva ja kellaajaga, aga sellel on ajavööndi nihe 10 baiti 100 XNUMX XNUMX nanosekundit 0001-01-01 9999-12-31
kuupäevaaeg2 Kasutatakse kuupäeva ja kellaaja määramiseks 1. jaanuarist 0001 kuni 31. detsembrini 9999 6 baiti 100 XNUMX XNUMX nanosekundit 0001-01-01 9999-12-31

Näidispäring:

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

Väljund:

'2030-01-01'

SQL-i märgistringide andmetüübid

See kategooria on seotud märgitüüpidega. See võimaldab teil määratleda fikseeritud ja muutuva pikkusega märgiandmeid. Sellel on neli tüüpi andmetüüpe. Allpool on toodud märgistringi andmetüübid koos näidetega.

Andmetüüp Kirjeldus Madalam limiit Ülemine piir Mälu
sõjavanker See on fikseeritud laiusega märgistring. See salvestab maksimaalselt 8,000 tähemärki. 0 tähemärki 8000 tähemärki n baiti
varchar See on muutuva laiusega märgijada. 0 tähemärki 8000 tähemärki n baiti + 2 baiti
varchar (max) See on muutuva laiusega märgistring. See salvestab maksimaalselt 1,073,741,824 XNUMX XNUMX XNUMX tähemärki. 0 tähemärki 2^31 tähemärki n baiti + 2 baiti
tekst See on muutuva laiusega märgijada. See salvestab maksimaalselt 2 GB tekstiandmeid. 0 tähemärki 2,147,483,647 tähemärki n baiti + 4 baiti

Näidispäring:

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

Väljund:

See on tähemärgi andmetüüp

Unicode'i märgistringide andmetüübid SQL-is

See kategooria talletab kõik Unicode'i tähemärgid, mis kasutavad UTF-16 kodeeringut.

Andmetüüp Kirjeldus Madalam limiit Ülemine piir Mälu
nchar See on fikseeritud laiusega Unicode'i string. 0 tähemärki 4000 tähemärki 2 korda n baiti
nvarchar See on muutuva laiusega Unicode'i string. 0 tähemärki 4000 tähemärki 2 korda n baiti + 2 baiti
ntekst See on muutuva laiusega Unicode'i string. 0 tähemärki 1,073,741,823 tähemärki 2 korda nööri pikkus

Näidispäring:

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

Väljund:

See on nCharacter Datatype

SQL-i kahendstringi andmetüübid

See kategooria sisaldab fikseeritud ja muutuva pikkusega binaarstringe.

Andmetüüp Kirjeldus Madalam limiit Ülemine piir Mälu
binaarne See on fikseeritud laiusega binaarstring. See mahutab maksimaalselt 8,000 baiti. 0 baiti 8000 baiti n baiti
varbinaarne See on muutuva laiusega binaarjada. See mahutab maksimaalselt 8,000 baiti. 0 baiti 8000 baiti Sisestatud andmete tegelik pikkus + 2 baiti
pilt See on muutuva laiusega binaarjada. See salvestab maksimaalselt 2 GB. 0 baiti 2,147,483,647 baiti -

Näidispäring:

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

Väljund:

0x000C

Muud andmetüübid SQL-is

Need on muud SQL Serveri andmetüübid koos allpool toodud kirjeldustega:

Andmetüüp Kirjeldus
Kursor Selle väljundiks on veerg, mis koosneb nii sp_cursor_list kui ka sp_describe_cursor muutujatest. Tagastab kursori muutuja nime.
Rowversioon See lisab tabeli ridadele versioonitempli.
Hierarhiid See andmetüüp esindab positsiooni hierarhias.
Unikaalne identifikaator Salvestab GUID-i, mis on sageli teisendatud märgiavaldisest.
Sql_variant See salvestab SQL Serveri toetatud andmetüüpide väärtusi.
XML See salvestab XML-andmed veerus.
Ruumigeomeetria tüüp See kujutab andmeid lamedas koordinaatsüsteemis.
Ruumigeograafia tüüp See esindab andmeid ümara maa koordinaatide süsteemis.
tabel See salvestab tulemuste komplekti hilisemaks töötlemiseks.

Huvitavaid fakte!

  • CHAR-andmetüüp on andmete hankimisel kiirem kui VARCHAR-andmetüüp, kuna selle fikseeritud laius väldib pikkusega seotud tühikute arvutamist.ping.

KKK

VARCHAR salvestab mitte-Unicode'i märke, kasutades igaühele ühte baiti, samas kui NVARCHAR salvestab Unicode'i märke, kasutades igaühele kahte baiti. Valige NVARCHAR, kui veerg peab sisaldama mitut keelt või sümbolit väljaspool ühte koodilehte; vastasel juhul kasutab VARCHAR vähem salvestusruumi.

Kasutage KÜMNESKORVU (või NUMERIKKU), kui väärtused peavad olema täpsed, näiteks raha või mõõtühikud, kuna see salvestab fikseeritud täpsuse. Kasutage UJUKORVU ligikaudsete teaduslike väärtuste jaoks, kus väikesed ümardamiserinevused on vastuvõetavad ja väga lai vahemik on täpsem.

Jah. SQL Serveris on DECIMAL ja NUMERIC funktsionaalselt identsed. Mõlemad aktsepteerivad täpsust ja skaalat ning salvestavad täpseid fikseeritud koma numbreid, seega on need kaks märksõna omavahel asendatavad. Loetavuse huvides võite kasutada mis tahes nime, mida teie meeskond eelistab.

CHAR on fikseeritud pikkusega tüüp, mis täidab lühemad väärtused tühikutega, seega kasutab iga väärtus deklareeritud laiust. VARCHAR on muutuva pikkusega ja salvestab ainult sisestatud tähemärgid pluss kaks baiti. Kasutage CHAR-i ühtlaste koodide ja VARCHAR-i erineva pikkusega teksti jaoks.

Jah. ALTER TABLE table_name ALTER COLUMN column_name new_type muudab veeru andmetüüpi. Muudatus õnnestub ainult siis, kui olemasolevad väärtused teisendatakse uude tüüpi; vastasel juhul see ebaõnnestub, seega testige teisendusi ja varundage esmalt andmed.

Tavaline VARCHAR(n) salvestab kuni 8,000 tähemärki. VARCHAR(max) salvestab kuni umbes 2 GB (2^31-1 baiti) ja on mõeldud mahuka teksti jaoks, mis ületab 8,000 tähemärki. Kasutage VARCHAR(max) ainult siis, kui väärtused saavad tõesti nii suured olla.

Jah. GitHubi koopia oskab soovitada veeru andmetüüpe ning genereerida loomuliku keele viipadest DECLARE ja CREATE TABLE lauseid. Enne soovituste rakendamist tootmises kontrollige alati oma andmetega võrreldes täpsust, skaalat, pikkust ja Unicode'i vajadusi.

Tehisintellekti ja masinõppe tööriistad vaatavad üle näidisandmed, et soovitada sobivaid tüüpe, täpsust ja pikkusi, märgistavad ülemõõdulisi veerge, mis raiskavad salvestusruumi, ja tuvastavad migreerimise ajal mittevastavusi. Need kiirendavad skeemi kujundamist, samal ajal kui arendaja kinnitab lõplikke valikuid.

Võta see postitus kokku järgmiselt: