SQLShack (Dansk)

posted in: Articles | 0

I denne artikel vil vi gennemgå de SQL varchar data, herunder en grundlæggende definition og oversigt forskelle fra varchar(n), UTF-8 understøttelse, Sortering, overvejelser om ydeevne og meget mere.

Data spiller en afgørende rolle i enhver organisation, og en attribut, hvormed den er defineret, kaldes dens datatype. I enkle ord angiver datatype, hvilken type data ethvert objekt, variabel eller udtryk kan gemme., Som S .l-Udvikler skal vi forstå og beslutte, hvilken type data der vil blive indeholdt af hver kolonne i en tabel, mens vi opretter en s .l-tabel. Som ethvert andet programmeringssprog understøtter S .l også en række datatyper, der kan indeholde heltalsdata, dato og tidsdata, karakterdata osv. og giver dig mulighed for at definere dine egne datatyper også. S .l varchar er en af de mest kendte og mest anvendte datatyper blandt partiet. I denne artikel vil vi gå gennem forskellige facetter af S .l Server varchar I s .l server.

nedenfor er den disposition, som vi vil dække i denne blok.,

  1. Introduktion til SQL Server varchar data type i SQL Server
  2. Brug af varchar for store blokke af tekst
  3. Hvad er nyt i SQL Server 2019 preview for varchar datatype?,
  4. indflydelse af sortering på varchar s INL I S UTL Server
  5. UTF-8 support med varchar I s UTL Server 2019 CTP
  6. s Letl Server Varchar til datakonverteringer og datavisning
  7. opbevaring og ydeevne overvejelser ved hjælp af S Letl Server varchar
  8. indvirkning på strenglængden af S Varl varchar med CAST og konverter funktioner

lad os gå videre og se det førnævnte i aktion.

så hvad er varchar I S ?l?

Som navnet antyder betyder varchar tegndata, der varierer., Også kendt som variabel karakter, det er en ubestemt længde streng datatype. Det kan indeholde tal, bogstaver og specialtegn. Microsoft s .l Server 2008 (og derover) kan gemme op til 8000 tegn som den maksimale længde af strengen ved hjælp af varchar datatype. S .l varchar normalt holder 1 byte per tegn og 2 flere bytes for længden oplysninger. Det anbefales at bruge varchar som datatype, når kolonner har variabel længde, og de faktiske data er langt mindre end den givne kapacitet. Lad os skifte til SSMS og se, hvordan varchar fungerer.,

følgende eksempel opretter tre variabler (navn, køn og alder) med varchar som datatype og forskellige værdier, der tildeles dem. Som det fremgår af resultatsættene vist nedenfor, er strenglængden af S .l varchar-kolonnerne som standard 1, og den returnerer kun den første værdi af variablerne(resten af strengen bliver afkortet), når der ikke sendes nogen strenglængde for varchar-datatypen. Funktion len () bruges til at bestemme antallet af tegn, der er gemt i varchar-kolonnen.

hvordan S ?l varchar(MA?) er forskellig fra varchar(n)?,

Der er tidspunkter, hvor SQL-udviklere (mig selv inklusive) normalt definere varchar datatype uden en længde, og efterfølgende, er ikke til at indsætte strengen poster i SQL-tabel, er det fordi, SQL-Server, tildeler 1 karakter plads som standard værdi til varchar-kolonne, der er defineret uden nogen længde. I praktiske scenarier bruges varchar (n) til at gemme variabel længdeværdi som en streng, her ‘N’ angiver strenglængden i bytes, og den kan gå op til 8000 tegn., Lad os nu gå videre og se, hvordan vi kan gemme s .l varchar-data med en strenglængde i kolonnen i en s .l-tabel. Nedenfor script opretter tabellen Demovarchar med nogle data i det. Og resultatet skærmen viser registreringer af 7 medarbejdere baseret på deres afdelinger, alder osv.

Antag, at der er en ny tilføjelse af en medarbejder i organisationen, og vi, som SQL data udviklere, ville være nødt til at indsætte denne nye rekord i ovenstående tabel ved hjælp af SQL INSERT Statement. Nedenfor er et sådant eksempel vist.,

1
INSERT INTO Demovarchar VALUES(‘Newton Hamilton’, ‘Isaac’,’M’,’Design Head’,69)

Oops, SQL Server encountered an error and terminated the statement saying string or binary data would be truncated., Dette er sket fordi, kolonne Efternavn varchar(10) kan indeholde op til 10 tegn, og vi her forsøger at sætte en ny rekord med streng længde(‘Newton Hamilton’), der er klart større end 10 tegn. Som en hurtig løsning kan vi ændre tabellen og øge datatypen på S .l varchar-kolonnen, siger til varchar(50) for at indsætte den nye række. Udfør nedenstående script for at ændre og indsætte en ny post i tabellen., Derudover kan du bruge LEN() og DATALENGTH () – funktioner til at bestemme antallet af tegn og Lagringsstørrelsen i henholdsvis byte, der er gemt i varchar-kolonnen.

Vi observerede ovenfor, hvordan vi kan indstille eller ændre strenglængden i s .l varchar-kolonnen for at imødekomme forretningsbehovet. Overvej dog et scenario, hvor vi er usikre på datastørrelsen, der vil blive indlæst i Vores s .l-tabeller, under sådanne omstændigheder er inspektion og ændring af datatypestørrelse for hver kolonne ikke et levedygtigt valg., En af mulighederne for at håndtere dette kunne være at indstille streng længde på højere bar i SQL Server varchar-kolonne (forudsat at du har et groft skøn over, hvad længden af strengen kolonne ville være ca).

et vigtigt punkt at holde i betragtning, vi kan kun bruge strenglængde op til varchar(8000), da dette er det maksimale antal tegn, som s .l varchar(n) datatype kan indeholde. Så i tilfælde, hvor der er chancer for, at strenglængden af varchar-kolonnen kan overstige 8000 byte, vil brug af varchar(8001) eller noget højere resultere i en fejl., One short example demonstrating this fact is shown below.

1
2

DECLARE @name AS varchar(8001) = ‘john parker d”souza’;
SELECT @name Name

SQL Server 2005 got around this limitation of 8KB storage size and provided a workaround with varchar(max)., Det er en ikke-Unicode stor variabel længde karakter datatype og kan gemme maksimalt 2^31-1 bytes (2 GB) af ikke-Unicode-tegn.

Da jeg fik først introduceret til begreberne varchar(n) og SQL varchar, den fælles spørgsmål, som enhver anden nybegynder, jeg havde, var hvorfor kan vi ikke blot erklære en kolonne af data type varchar(8500) eller højere, da vi har varchar(max), der tager sig af lagring på op til 2 gb og hvorfor skulle vi til enten at bruge varchar(<=8000) eller varchar(antal)?, Jeg fik mine svar på lidt forskning, at s .l Server bruger side til at gemme data, og størrelsen på hver side er 8KB(undtagen sidehoved, række forskydningsstørrelse). Hvis de data, der skal gemmes, er mindre end eller lig med 8000 bytes, gemmer varchar(n) eller varchar(ma.) dem i række. Men hvis data overstiger 8000 byte størrelse så det behandles som en stor genstand(LOB) og de er ikke gemt i rækken, men i separate lob sider(LOB_DATA)., Række i så fald vil kun have en pointer til LOB data side, hvor de faktiske data er til stede, og S .l Server tildeler automatisk en over-flo.indikator til siden for at manipulere datarækker. Kort sagt, hvis du ved, at dataene kan overstige 8000 byte, er det en bedre mulighed at bruge varchar(ma.) som datatype.

Vi kan henvise til DMV sys.dm_db_index_physical_stats at se, hvad slags side fordeling (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) er udført., Du kan også tjekke dette link, hvis du vil have detaljeret forklaring på, hvordan s .l Server udøver række-og sidegrænser med både varchar(n) og varchar(ma.) datatyper.

lad os hurtigt hoppe over til SSMS og se, hvordan vi kan bruge varchar(ma.). Udfør følgende script for at indsætte 1 post, hvor StringCol kolonneværdi i hver række er 15.000 B tegn (dvs.15.000 bytes).

en begrænsning ved brug af varchar(MA.) er, at vi ikke kan oprette et indeks, der har en varchar(ma.) som en nøglekolonne, i stedet anbefales det at lave et fuldtekstindeks i den kolonne.,

en hurtig note at gøre – herfra til den sidste del af denne artikel vil vi nævne varchar i stedet for varchar(n). Overvej det ikke som varchar med standardværdi = 1.

for At få nogle mere interessante forskelle mellem varchar(n), og varchar(max) i SQL Server, kan du overveje at gå gennem denne artikel, der Sammenligner VARCHAR(max) vs VARCHAR(n) datatyper i SQL Server.

UTF-8 understøttelse af SQL Server 2019 CTP

Før vi graver i det, SQL Server 2019 preview funktion har at tilbyde for SQL varchar, så lad os hurtigt se på en mere interessant data type ‘nvarchar’ først., Ligesom s .l Server varchar har vi s .l nvarchar , præfikset n i nvarchar betegner Unicode , dvs.det gemmer både Unicode og ikke-Unicode-data. Nøgleforskellen mellem varchar og nvarchar er den måde, de gemmes på, varchar gemmes som almindelige 8-bit data(1 byte pr. På grund af denne grund kan nvarchar rumme op til 4000 tegn, og det tager dobbelt plads som S .l varchar. Du kan gå gennem dette link for at lære mere om nvarchar I s .l Server.,

Med den offentlige forhåndsvisning af S .l Server 2019 har Microsoft annonceret understøttelsen af UTF-8-tegnkodning til de eksisterende datatyper (varchar og char). For dem, der ikke er opmærksomme på UTF-8, står det for Unicode Transformation Format og er en Unicode-baseret kodning, der understøtter mange sprog. 8 i UTF-8 betyder, at den bruger 1 byte (8-bit) til at repræsentere et tegn i hukommelsen. Ligeledes bruger UTF-16 16 Bit (2 byte) til at repræsentere et tegn. Vi vil begrænse omfanget af denne nye S .l Server 2019 CTP-forbedring til ‘S .l varchar’ kun i denne artikel.,

Denne udvidelse har de følgende konsekvenser i SQL Server: er

  1. Forbedrer Data-kompatibilitet

    Indtil SQL Server 2019 CTP, SQL varchar data type havde kapacitet til at lagre Ikke-Unicode-data og med dette eksempel, kan vi nu oprette en varchar-kolonne til at lagre Unicode-data i henhold til UTF-8 aktiveret sorteringer (_UTF8). UTF-8 er tilladt i varchar-datatyperne og er aktiveret, når du opretter eller ændrer et objekts sortering til en sortering med UTF8-suffikset. Dette hjælper med at minimere problemer med karakterkonvertering.,

  2. reduktion i lager-og ydelsesforbedringer

    UTF-8-understøttelse af varchar-datatype giver betydelige lagringsbesparelser afhængigt af det tegnsæt, der er i brug. For fx at bruge UTF-8-aktiveret sortering, ændre kolonnen datatype fra nvarchar(20) varchar(20) tilbyder et markant fald i krav til opbevaring, da nvarchar(20) kræver 40 bytes til opbevaring og varchar(20) har brug for 20 bytes for samme Unicode-strenge.

vigtig sidebemærkning – da denne forbedring stadig er i forhåndsvisning, kan vi forvente flere fremskridt på denne front i den nærmeste fremtid., Eksisterende Unicode (UTF-16) datatyper (nchar, nvarchar og nte .t) forbliver imidlertid uændrede i s .l Server 2019 previe..

Sortering med SQL varchar i SQL Server 2019 CTP

Sortering i SQL Server definerer konfigurationer til at bestemme forskellige regler, som tilfældet følsomhed, accent følsomhed, sortering, karakter typer og bredde osv. At forstå alle disse egenskaber, og hvordan fungerer de med dine data, bliver meget vigtigt. Sortering kan indstilles på server, database, udtryk eller kolonne niveau., UTF-8 understøtter database-niveau eller kolonne-niveau sortering i SQL Server 2019 CTP og er aktiveret, når du opretter eller ændrer Database eller kolonne sortering til en sammenstilling med UTF8-suffiks.

Hvis du udfører nedenstående forespørgsel mod S .l Server 2019 CTP, vil du kunne se alle UTF-8 understøttede collationer på din forekomst af s .l Server ved hjælp af funktion (fn_helpcollations()).,d=”284f85b8b5″>

1
2
3

SELECT Name, Description
FROM fn_helpcollations()
WHERE Name like ‘%UTF8’;

With SQL Server 2019 preview version, we can assign Unicode collations (UTF-8 supported) as well for SQL varchar columns using the COLLATE clause while declaring the varchar column., På denne måde anvendes specifik sortering på den pågældende kolonnes data uden at påvirke resten af databasen.

da vi har at gøre med S .l Server varchar datatype i dette indlæg, lad os se, hvordan kolonne sortering med s .l varchar datatype værker. Udfør koden nedenfor for at ændre s .l Server Varchar kolonne sortering fra en sortering type til _UTF8 endelse. Du kan læse mere om Databasesamling herfra.,TE TABEL demovarcharcollate

(ID int PRIMARY KEY,
Beskrivelse varchar(50) SAMLE LATIN1_GENERAL_100_CI_AS_SC IKKE NULL
);
ALTER TABLE demovarcharcollate
ÆNDRE KOLONNE Beskrivelse varchar(50) SAMLE LATIN1_GENERAL_100_CI_AS_SC_UTF8 IKKE NULL;

Rolle SQL varchar i data-konverteringer og-data display

SQL Server varchar er meget udbredt i visning af data i den ønskede formater ved hjælp af Konvertere og Kastede funktioner i SQL Server., Real data beskæftiger sig med en blanding af datatyper, og de skal være kompatible med hinanden (dvs.tilhøre den samme datatype), før vi sammenligner med dem. S .l Server understøtter både implicitte og eksplicitte konverteringer.

  • Bemærk: Tjek SQL CAST og SQL-KONVERTER funktion oversigt for at få flere oplysninger om, hvordan vi kan udføre disse konverteringer for data-kompatibilitet.

Med et uophørligt behov for formatering og visning af data i den krævede output kommer S .l varchar virkelig praktisk., Som s .l-udvikler selv finder jeg det ekstremt ligetil at bruge convert/cast med varchar-datatype til at foretage opgaver eller transformationer på data, især for datofelterne.

Jeg bruger table FactInternetSales fra prøve db Adventure .orksd .2017 for at vise, hvordan denne funktion fungerer. Du kan henvise til enhver tabel med nogle datetime og penge/float felter til praksis formål. Følgende script konverterer to datetime kolonner til S .l varchar typer med stil 102 og 107 for at vise data i formatet yyyy.mm.dd og Mon dd, ÅÅÅÅ henholdsvis., Salesamount-kolonnen med penge som datatype konverteres også til varchar, og style 3 anvendes til at vise mængden med kommaer som vist på skærmbilledet nedenfor. Derudover vil vi gerne se data for de ordrer, der kun er placeret i år 2010, ved hjælp af CAST-funktionen til at konvertere datetime-kolonnen til varchar-data, strengsammenligningen udføres i clausehere-klausulen. Du kan også gå over s .l convert date for at finde mere information om datokonverteringsformater og stilarter.,

Indvirkning på streng længde af SQL varchar med CAST og KONVERTERE funktioner

SQL Server gemmer lang række data i de almindeligt anvendte varchar data type, og det bliver nyttigt at vide, den forventede og den maksimale længde af den strenge at vise resultater i BRUGERGRÆNSEFLADEN. Kopier og udføre nedenstående kode, hvor vi passerer en lang streng i en uspecificeret varchar længde variabel (@demovarchar) og også i en anden variabel med en defineret varchar længde (@demovarcharwithcast)., Microsoft tager 30 som standard længde for s .l varchar (med uspecificeret varchar Længde) I S .l Server, når det bruges med CAST og konvertere funktioner. I vores tilfælde, selv om længden af strengen var 52, det returnerede 30 som længden som vist i det sidste resultat output.et vigtigt punkt at bemærke her er, at når et uspecificeret længde varchar-felt oprettes, er standardlængden af et sådant felt 1 (vist i rød farve nedenfor)., Når varchar længde er uspecificeret og bruges med CAST eller konvertere funktioner, CAST eller konvertere returnerer n=30 som standard streng længde af denne konvertering (markeret med blå farve nedenfor).,le’) SOM ‘LenOFStringPassed’

VÆLG DATALENGTH(@demovarchar) SOM ‘DefaultVarcharLength’
VÆLG DATALENGtH(CAST(@demovarcharwithcast SOM varchar(60))) SOM ‘VarcharLengthSpecifiedWithCast’
VÆLG DATALENGTH(CAST(@demovarcharwithcast SOM varchar)) SOM “DefaultVarcharLengthWithCast’

Opbevaring og overvejelser om ydeevne ved hjælp af SQL varchar

Data typer som varchar char, nvarchar og er alle bruges til at gemme string data i SQL Server., S .l varchar gemmer variabel strenglængde, mens S .l char gemmer fast strenglængde. Dette betyder, at s .l Server varchar kun indeholder de tegn, vi tildeler den, og char har det maksimale kolonnerum uanset hvilken streng den holder.

På grund af de faste feltlængder trækkes data lige fra kolonnen uden at gøre nogen datamanipulation, og indeksopslag mod varchar er langsommere end for char-felter. CHAR er bedre end varchar performance wiseise, men det tager unødvendigt hukommelsesplads, når dataene ikke har en fast længde., Så i tilfælde, hvor diskstørrelse ikke er et problem, anbefales det at bruge CHAR.

I enkle ord, sige, at vi har en kolonne med varchar(150) = ‘SQLShack’ – Det vil tage 8 bytes(sqlshack) + 2 bytes for længde = 10 byte i den faktiske og for kolonne med char(150) = ‘SQLShack’ – Dette vil forbruge hele 150 bytes på disken, uanset hvad vi passere som en streng. Nedenstående eksempel viser, hvordan CHAR bruger den maksimale tildelte plads (150) til at passe i strengen bestået, og hvordan varchar kolonne bruger kun den nødvendige plads.,

bundlinjen er at bruge den datatype, der passer til vores behov. Du kan bruge SQL varchar når størrelser af kolonne variere betydeligt, bruger varchar(max) når der er chancer for, at streng længde kan overstige 8000 bytes, skal du bruge char, når størrelser af kolonne er faste, og brug nvarchar, hvis der er et krav om at opbevare-eller flersprogede Unicode-data.

konklusion

datatyper spiller en grundlæggende rolle i databasedesign, men de overses ofte., En god forståelse og præcis brug af datatyper sikrer korrekt karakter og længde af data er befolket i tabellerne. Hensigten med dette tip, er at hjælpe dig med at få en forståelse af de grundlæggende egenskaber og funktioner i SQL Server varchar sammen med sin performance og storage aspekter i SQL Server. Vi dækkede også de seneste fremskridt inden for S .l varchar i forhåndsvisningen af S .l Server 2019.

Se også

Du kan tjekke disse andre artikler for at fortsætte din læring på S .l datatyper.,

  • Forstå GUID data type i SQL Server
  • Rumlige datatyper i SQL Server
  • Forfatter
  • Seneste Indlæg
Gauri er en SQL Server-Professionel og har 6+ års erfaring i at arbejde med globale multinationale rådgivning og teknologi organisationer. Hun er meget passioneret omkring at arbejde på SQL Server med emner som Azure SQL-Database, SQL Server Reporting Services, R, Python, Magt, BI -, Database-motor, osv., Hun har mange års erfaring i teknisk dokumentation og er glad for teknologi authoring.
hun har en dyb erfaring med at designe data-og analyseløsninger og sikre dens stabilitet, pålidelighed og ydeevne. Hun er også certificeret i SQL Server og har bestået certificeringer som 70-463: Gennemførelse af Data Warehouses med Microsoft SQL Server.,
Vis alle indlæg af Gauri Mahajan

Seneste indlæg af Gauri Mahajan (se alle)
  • Udforsk Azure Analyse Model og Data – februar 4, 2021
  • Kom godt i gang med Azure Analysis Services – januar 13, 2021
  • Forbind Azure Databricks data til Magten BI Desktop – juni 1, 2020

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *