SQLShack (Norsk)

posted in: Articles | 0

I denne artikkelen vil vi gjennomgå SQL varchar data type inkludert en grunnleggende definisjon og oversikt, forskjeller fra varchar(n), UTF-8 støtte, Sortering, ytelse betraktninger og mer.

Data som spiller en avgjørende rolle i enhver organisasjon, og en egenskap som det er definert kalles data-type. I enkle ord, data type angir hvilken type data object, variabel eller et uttrykk kan lagre., Som en SQL developer, mens du oppretter en SQL-tabellen, har vi til å forstå og bestemmer hvilken type data vil ligge ved hver kolonne i en tabell. Som alle andre programmeringsspråk, SQL støtter også et spekter av typer data som kan inneholde heltall data, dato og klokkeslett data, tegnet av data etc. og lar deg definere datatyper av dine egne. SQL varchar er en av de best kjente og mest brukte typer data, blant mye. I denne artikkelen vil vi gå gjennom ulike fasetter av SQL Server varchar i SQL server.

Nedenfor er omrisset at vi vil dekke i denne blokken.,

  1. Introduksjon til SQL Server varchar datatype i SQL Server
  2. Bruk av varchar for store blokker med tekst
  3. Hva er nytt i SQL Server-2019 forhåndsvisning for varchar datatype?,
  4. Innflytelse av sortering på varchar SQL for SQL Server
  5. UTF-8 støtte med varchar i SQL Server-2019 CTP
  6. SQL Server varchar for data konverteringer og data display
  7. Lagring og ytelse hensyn ved hjelp av SQL Server varchar
  8. Innvirkning på hyssinglengde på SQL varchar med STØPEJERN og KONVERTERE funksjoner

La oss gå videre og se de nevnte i aksjon.

Så hva er varchar i SQL?

Som navnet antyder, varchar betyr karakter data som er varierende., Også kjent som Variabel Karakter, det er en ubestemmelig lengde string datatype. Det kan inneholde tall, bokstaver og spesialtegn. Microsoft SQL Server 2008 (og over) kan lagre og opp til 8000 tegn som den maksimale lengden av strengen ved hjelp av varchar datatype. SQL varchar holder som regel 1 byte per tegn og 2 flere byte for lengde informasjon. Det er anbefalt å bruke varchar som datatype når kolonnene har variabel lengde og de faktiske dataene er langt mindre enn den gitte kapasitet. La oss slå til SSMS og se hvordan varchar fungerer.,

følgende eksempel oppretter tre variabler (navn, kjønn og alder) med varchar som datatype og ulike verdier som er tilordnet til dem. Som fremgår av resultat sett vist nedenfor, som standard, lengden på strengen av SQL varchar kolonner er 1 og den returnerer bare den første verdien av variablene(resten av strengen blir avkortet) når ingen streng lengde er gått for varchar datatype. Funksjonen len() brukes til å fastslå antallet tegn som er lagret i varchar kolonne.

Hvordan SQL varchar(max), er forskjellig fra varchar(n)?,

Det er tider hvor SQL utviklere (inkludert meg selv) vanligvis definere varchar datatype uten en lengde, og senere, er de ikke klarte å sette inn strengen poster i SQL bordet, dette er fordi SQL Server tildeler 1 tegn som standard verdi for varchar kolonne som er definert uten noen lengde. I praktisk scenarier, varchar(n) brukes til å lagre variabel lengde verdi som en streng, her ‘n’ betegner string lengde i byte, og det kan gå opp til 8000 tegn., Nå, la oss gå videre og se hvordan vi kan lagre SQL varchar data med en streng lengde i kolonnen til en SQL-tabellen. Nedenfor skriptet oppretter tabellen Demovarchar med noen data i det. Og resultatet skjermen viser registreringer av 7 ansatte basert på deres avdelinger, alder etc.

Tenk, det er et nytt tillegg til en ansatt i organisasjonen, og vi, som SQL data utviklere, ville ha for å sette inn dette nye post i tabellen ovenfor ved hjelp av INSERT SQL-Setningen. Nedenfor er et eksempel er 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 har skjedd fordi, kolonne Etternavn varchar(10) kan holde opp til 10 tegn og her er vi prøver å sette en ny rekord med streng lengde(‘Newton Hamilton’) som er klart større enn 10 tegn. Som en rask løsning, kan vi endre bordet og øke datatype for SQL varchar kolonne, sier til varchar(50) for å sette inn den nye raden. Utføre nedenfor skript for å ENDRE og SETT inn en ny post i tabellen., I tillegg kan du bruke LEN() og DATALENGTH() funksjoner for å bestemme antall tegn og lagring størrelse i byte, henholdsvis som er lagret i varchar kolonne.

Vi har observert over hvordan vi kan angi eller endre lengden på strengen i SQL varchar kolonne for å møte bedriftens behov. Imidlertid, bør du vurdere et scenario, hvor vi er usikker på data størrelse som kommer til å bli lagt inn i vår SQL-tabeller, under slike omstendigheter, inspeksjon og endre data type størrelse for hver og hver kolonne er ikke et godt valg., Ett av alternativene for å håndtere dette på kan være å angi lengden på strengen på høyere bar i SQL Server varchar kolonne (forutsatt at du har en grov estimering av hva lengden av strengen kolonne ville være ca.).

Et viktig poeng å holde i betraktning, kan vi bruke string lengde opp til varchar(8000) bare som dette er det maksimale antallet tegn som SQL varchar(n) datatype kan holde. Så i tilfeller der det er sjansene for at lengden på strengen av varchar kolonnen kan overstige 8000 byte, ved hjelp av varchar(8001) eller noe høyere, vil det resultere i en feil., 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 store variabel lengde karakter data type og kan lagre maksimalt 2^31-1 byte (2 GB) for ikke-Unicode-tegn.

Når jeg ble først introdusert til begrepene varchar(n) og SQL varchar, det vanligste spørsmålet som alle andre nybegynner jeg hadde, var hvorfor kan vi ikke bare erklærer en kolonne med data type varchar(8500) eller høyere, siden vi har varchar(max) som tar seg av lagring av opp til 2 gb og hvorfor er vi ment å enten bruke varchar(<=8000) eller varchar(max)?, Jeg fikk mine svar på et lite forskning som SQL Server bruker siden til å lagre data og størrelsen på hver side er 8KB(unntatt topptekst, rad kvoter størrelse). Hvis data skal lagres er mindre enn eller lik 8000 byte, varchar(n) eller varchar(max) lagrer den på rad. Imidlertid, hvis dataene overstiger 8000 byte størrelse så er det behandlet som et Stort Objekt(LOB), og de er ikke lagret på-rad, men i separate LOB sider(LOB_DATA)., Rad i slike tilfelle vil bare ha en peker til LOB data side der hvor de faktiske dataene er til stede og SQL Server tilordner automatisk en over-flyt-indikatoren til siden for å manipulere data i rader. I nøtteskall, hvis du vet data kan overstige 8000 byte, det er et bedre alternativ å bruke varchar(max) som datatype.

Vi kan se til BILTILSYNET sys.dm_db_index_physical_stats for å se hva slags side fordeling (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) er utført., Du kan også sjekke ut denne linken hvis du vil ha detaljert forklaring på hvordan SQL Server øvelser rad og siden grensene med både varchar(n) og varchar(max) datatyper.

La oss hoppe raskt over til SSMS og se hvordan vi kan bruke varchar(max). Utfør følgende skript for å sette inn 1 registrere hvor StringCol kolonnen verdi i hver rad er 15.000 B tegn (dvs. mer enn 15 000 byte).

En begrensning av bruk av varchar(max), er at vi ikke kan lage en indeks som har en varchar(max) som en nøkkel-kolonnen, i stedet, er det tilrådelig å gjøre en Full-tekst indeks på denne kolonnen.,

En rask hvis du vil gjøre – Fra her til den siste etappen av denne artikkelen, vil vi nevne varchar i stedet for varchar(n). Anser det IKKE som varchar med default verdi = 1.

for Å lære noen mer interessante forskjeller mellom varchar(n) og varchar(max) i SQL Server, kan du vurdere å gå gjennom denne artikkelen, kan du Sammenligne VARCHAR(max) vs VARCHAR(n) datatyper i SQL Server.

UTF-8 støtte med SQL Server 2019 CTP

Før vi grave i hva SQL Server-2019 forhåndsvisning funksjonen har å tilby for SQL varchar, la oss raskt se på en mer interessante data type – ‘nvarchar’ først., Som SQL Server varchar , vi har SQL nvarchar , prefiks n i nvarchar betegner Unicode, dvs. den lagrer både Unicode og Unicode-data. Den største forskjellen mellom varchar og nvarchar er måten de er lagret, varchar er lagret som vanlig 8-bit data(1 byte per tegn) og nvarchar lagrer data på 2 byte per tegn. På grunn av denne grunn, nvarchar kan inneholde opptil 4000 tegn, og det tar dobbelt rommet som SQL varchar. Du kan gå gjennom denne linken for å lære mer om nvarchar i SQL Server.,

Med den offentlige forhåndsvisning av SQL Server-2019, Microsoft har annonsert støtte for UTF-8 tegnkoding til eksisterende data typer (varchar og røye). For de som ikke er klar over UTF-8, og det står for Unicode Transformation Format og er et Unicode-basert koding som støtter mange språk. 8 i UTF-8 betyr at den bruker 1 byte (8 bits) til å representere et tegn i minnet. Likeledes, UTF-16 bruker 16-bits (2 bytes) til å representere et tegn. Vi vil begrense omfanget av denne nye SQL Server-2019 CTP ekstrautstyr til ‘SQL varchar» bare i denne artikkelen.,

Denne forbedringen har følgende betydning i SQL Server: er

  1. Forbedrer Data kompatibilitet

    Til SQL Server-2019 CTP, SQL varchar datatype hadde kapasitet til å lagre Ikke-Unicode-data og med dette forhåndsvisning, kan vi nå lage en varchar-kolonnen for å lagre Unicode-data under UTF-8 aktivert sorteringer (_UTF8). UTF-8 er tillatt i varchar datatyper og er aktivert når du skal opprette eller endre et objekt sortering til en sortering med UTF8-suffiks. Dette hjelper til med å minimere tegnkonvertering problemer.,

  2. Reduksjon i lagring og ytelse

    UTF-8 støtte for varchar datatype gir betydelig lagring besparelser avhengig av hvilket tegnsett som er i bruk. For eksempel, ved hjelp av en UTF-8 aktivert sortering, endre kolonnen datatype fra nvarchar(20) til varchar(20) har et betydelig fall i krav til oppbevaring siden nvarchar(20) krever 40 byte for lagring og varchar(20) trenger 20 byte for samme Unicode-streng.

Viktig side merk – Siden dette ekstrautstyret er fortsatt i forhåndsvisning, kan vi forvente flere progresjoner på denne fronten i nær fremtid., Imidlertid, eksisterende Unicode (UTF-16) datatyper (nchar, nvarchar og ntext) forbli uendret i SQL Server-2019 forhåndsvisning.

Sortering med SQL varchar i SQL Server-2019 CTP

Sortering i SQL Server definerer konfigurasjoner for å bestemme flere regler som store og små bokstaver, aksent-følsomhet, sortering, tegnet typer og bredde osv. Forstå alle disse egenskapene og hvordan arbeidet de gjør med dine data bli svært viktig. Sortering kan bli satt på server, database, et uttrykk eller en kolonne nivå., UTF-8 støtte database-nivå eller kolonne-nivå sortering i SQL Server-2019 CTP og er aktivert når du oppretter eller endrer Database eller kolonne sortering til en sortering med UTF8-suffiks.

Hvis du utføre under spørring mot SQL Server-2019 CTP, vil du være i stand til å se alle UTF-8 støttes sorteringene på forekomst av SQL Server ved hjelp av funksjonen (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åten, bestemt sortering er brukt til den aktuelle kolonnen data uten å påvirke resten av databasen.

Siden vi har å gjøre med SQL Server varchar datatype i dette innlegget, la oss se hvordan Kolonne Sortering med SQL varchar datatype fungerer. Kjøre koden nedenfor til å endre SQL Server varchar Kolonne Sortering fra en sortering type _UTF8 suffiks. Du kan lese mer på Database Sortering fra her.,TE TABELL demovarcharcollate

(ID int PRIMARY KEY,
Beskrivelse varchar(50) SORTER LATIN1_GENERAL_100_CI_AS_SC IKKE NULL
);
ENDRE TABELLEN demovarcharcollate
ENDRE KOLONNEN Beskrivelse varchar(50) SORTER LATIN1_GENERAL_100_CI_AS_SC_UTF8 IKKE NULL;

Rollen SQL varchar i data konverteringer og data display

SQL Server varchar er mye brukt i å vise data i den ønskelige formater bruke Konvertere og Kastet funksjoner i SQL Server., Reelle data avtaler med en blanding av typer data, og det må være kompatible med hverandre (dvs. tilhører samme datatype), før vi gjør sammenligninger til dem. SQL Server støtter både implisitt og eksplisitt konverteringer.

  • Merk: Sjekk ut SQL-CAST og SQL KONVERTERE funksjon oversikt for å få mer informasjon om hvordan vi kan utføre disse konverteringene for data-kompatibilitet.

Med en inderlig behov for å formatere og vise data i ønsket utgang, SQL varchar kommer virkelig godt med., Som en SQL developer meg selv, jeg synes det er ekstremt enkel å bruke konverter/støpt med varchar datatype for å gjøre oppgaver eller transformasjoner på data, spesielt for dato-feltene.

jeg bruker tabell FactInternetSales fra Utvalg DB AdventureWorksDW2017 å vise hvordan denne funksjonen fungerer. Du kan referere til en tabell med noen datetime og penger/flyte felt for praksis hensikt. Følgende skriptet konverterer to datetime-kolonner til SQL varchar typer med stil, 102 og 107 for å vise data i formatet åååå.mm.dd og Man dd, åååå henholdsvis., Også SalesAmount kolonne med Penger som en datatype er konvertert til varchar og stil 3 er brukt for å vise mengden med komma, som vist i skjermbildet under. I tillegg, sier, vi ønsker å vise data for bestillinger gjort i 2010 bare, bruker KASTET funksjonen til å konvertere datetime-kolonnen for å varchar data, string sammenligningen er utført i WHERE-setningsdelen. Du kan også gå over SQL konvertere dato for å finne mer informasjon om dato konvertering formater og stiler.,

Innvirkning på hyssinglengde på SQL varchar med STØPEJERN og KONVERTERE funksjoner

SQL-Serveren lagrer lang streng data i vanlig varchar datatype og det blir nyttig å vite den forventede og den maksimale lengder av strengene for å vise resultatene i BRUKERGRENSESNITTET. Kopier og kjøre koden nedenfor, hvor vi passerer en lang streng i en uspesifisert lengde varchar variabel (@demovarchar) og også i en annen variabel med en definert varchar lengde (@demovarcharwithcast)., Microsoft tar 30 som standard lengde for SQL Varchar (med uspesifisert varchar lengde) i SQL Server når den brukes med STØPEJERN og KONVERTERE funksjoner. I vårt tilfelle, selv om lengden av strengen var 52, det tilbake 30 som lengde som vist i det siste resultatet utgang.

Ett viktig poeng å merke seg her er at når en uspesifisert lengde varchar feltet er opprettet, standard lengde av slike felt er 1 (vises i rød farge nedenfor)., Når varchar lengde er uspesifisert og er brukt med STØPTE eller KONVERTERE funksjoner, STØPT eller KONVERTERE returnerer n=30) som standard string lengden av denne konverteringen (markert med blå farge nedenfor).,le’) SOM «LenOFStringPassed’

VELG DATALENGTH(@demovarchar) SOM «DefaultVarcharLength’
VELG DATALENGtH(CAST(@demovarcharwithcast SOM varchar(60))) SOM «VarcharLengthSpecifiedWithCast’
VELG DATALENGTH(CAST(@demovarcharwithcast SOM varchar)) SOM ‘DefaultVarcharLengthWithCast’

Lagring og ytelse hensyn ved hjelp av SQL varchar

typer Data, som varchar, røye og nvarchar er alt som brukes til å lagre streng data i SQL Server., SQL varchar butikker variabel streng lengde mens SQL røye butikker fast streng lengde. Dette betyr at SQL Server varchar har bare tegnene som vi tilordner den til og røye har den høyeste kolonnen plass uavhengig av strengen det holder.

på Grunn av den faste feltlengder, data er trukket rett fra kolonnen uten å gjøre noen data manipulasjon og indeks oppslag mot varchar er tregere enn for røye felt. RØYE er bedre enn VARCHAR ytelse klok, men det tar unødvendig plass i minnet når dataene ikke har en fast lengde., Så i tilfeller hvor disk størrelse er ikke et problem, det er anbefalt å bruke RØYE.

I enkle ord, sier vi har en kolonne med varchar(150) = ‘SQLShack» – Dette vil ta 8 byte(sqlshack) + 2 byte for lengde informasjon = 10 byte i faktiske og for kolonnen med røye(150) = ‘SQLShack» – Dette vil oppta hele 150 bytes på disk, uavhengig av hva vi passere som en string. Eksempelet nedenfor viser hvordan RØYE bruker den maksimale tildelte plassen (150) for å passe inn i strengen gått og hvordan varchar kolonne bruker bare nødvendig diskplass.,

Nederste linjen på, er å bruke data type som passer vårt behov. Du kan bruke SQL varchar når størrelsen på kolonnen variere betydelig, bruk varchar(max) når det er sjansene for at hyssinglengde kan overstige 8000 byte, bruk char når størrelser av kolonnen er faste og bruk nvarchar hvis det er et krav for å lagre Unicode-eller flerspråklige data.

Konklusjon

typer Data, spille en grunnleggende rolle for database design, men de er ofte oversett., En god forståelse og nøyaktig bruk av data typer sikre riktig natur og lengde av data er befolket i tabellene. Intensjonen med dette tipset er å hjelpe deg å få en forståelse av grunnleggende egenskaper og funksjoner i SQL Server varchar sammen med sin ytelse og lagring aspekter i SQL Server. Vi har også dekket av de siste fremskritt i SQL varchar i SQL Server-2019 Forhåndsvisning.

Se også:

Du kan sjekke ut disse andre artikler for å fortsette å lære på SQL-datatyper.,

  • Forstå GUID datatype i SQL Server
  • Romlige datatyper i SQL Server
  • Forfatter
  • Siste Innlegg
Gauri er en SQL Server-Profesjonell og har 6 års erfaring med å jobbe med global multinasjonale rådgivning og teknologi i organisasjoner. Hun er veldig opptatt av å jobbe på SQL Server emner som Azure SQL-Database, SQL Server Reporting Services, R, Python, Elektriske BI, Database engine, etc., Hun har mange års erfaring i teknisk dokumentasjon og er glad i teknologi-produksjon.
Hun har en dyp erfaring i å utforme data-og analytics-løsninger og sikrer stabilitet, pålitelighet og ytelse. Hun er også sertifisert i SQL Server og har gått sertifiseringer som 70-463: Implementering av Data Varehus med Microsoft SQL Server.,
Vis alle innlegg av Gauri Mahajan

Siste innlegg av Gauri Mahajan (se alle)
  • Utforsk Azure Analysis Services-Modell og Data – februar 4, 2021
  • Komme i gang med Azure Analysis Services – januar 13, 2021
  • Koble Azure Databricks data til Makten BI Desktop – juni 1, 2020

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *