SQLShack (Svenska)

posted in: Articles | 0

i den här artikeln kommer vi att granska SQL varchar datatyp inklusive en grundläggande definition och översikt, skillnader från varchar(n), UTF-8 stöd, sortering, prestandakrav och mer.

Data spelar en avgörande roll i någon organisation och ett attribut som det definieras kallas dess datatyp. I enkla ord anger datatypen vilken typ av data som helst objekt, variabel eller uttryck kan lagra., Som SQL-utvecklare måste vi förstå och bestämma vilken typ av data som kommer att finnas i varje kolumn i en tabell när vi skapar en SQL-tabell. Liksom alla andra programmeringsspråk, SQL stöder också en rad datatyper som kan hålla heltal data, datum och tid data, teckendata etc. och låter dig definiera datatyper av din egen också. SQL varchar är en av de mest kända och mest använda datatyperna bland partiet. I den här artikeln kommer vi att gå igenom olika aspekter av SQL Server varchar i SQL server.

nedan är den kontur som vi kommer att täcka i det här blocket.,

  1. introduktion till SQL Server varchar datatyp i SQL Server
  2. användning av varchar för stora textblock
  3. vad är nytt i SQL Server 2019 förhandsgranskning för varchar datatype?,
  4. påverkan av sortering på varchar SQL i SQL Server
  5. UTF-8 stöd med varchar i SQL Server 2019 CTP
  6. SQL Server varchar för datakonverteringar och datavisning
  7. lagrings-och prestandakrav som använder SQL Server varchar
  8. inverkan på stränglängden för SQL varchar med CAST och konvertera funktioner

låt oss gå vidare och se ovan nämnda i aktion.

så vad är varchar i SQL?

som namnet antyder betyder varchar teckendata som varierar., Även känd som variabel karaktär, är det en obestämd längd sträng datatyp. Det kan hålla siffror, bokstäver och specialtecken. Microsoft SQL Server 2008 (och senare) kan lagra upp till 8000 tecken som den maximala längden på strängen med varchar datatyp. SQL varchar innehåller vanligtvis 1 byte per tecken och 2 fler byte för längdinformationen. Det rekommenderas att använda varchar som datatyp när kolumnerna har variabel längd och de faktiska uppgifterna är mycket mindre än den givna kapaciteten. Låt oss byta till SSMS och se hur varchar fungerar.,

följande exempel skapar tre variabler (namn, kön och ålder) med varchar som datatyp och olika värden som tilldelas dem. Som framgår av resultatuppsättningarna som visas nedan är stränglängden för SQL varchar-kolumnerna som standard 1 och den returnerar endast det första värdet av variablerna (resten av strängen som trunkeras) när ingen stränglängd skickas för varchar-datatypen. Funktion len () används för att bestämma antalet tecken som lagras i kolumnen varchar.

hur SQL varchar(max) skiljer sig från varchar(n)?,

det finns tillfällen då SQL-utvecklare (inklusive mig själv) vanligtvis definierar varchar datatype utan en längd, och därefter misslyckades med att infoga strängposter i SQL-tabellen, det beror på att SQL Server allokerar 1 teckenutrymme som standardvärde till varchar-kolumnen som definieras utan någon längd. I praktiska scenarier används varchar (n) för att lagra variabelt längdvärde som en sträng, här betecknar ” n ” stränglängden i byte och det kan gå upp till 8000 tecken., Låt oss nu gå vidare och se hur vi kan lagra SQL varchar-data med en stränglängd i kolumnen i en SQL-tabell. Nedan script skapar tabellen Demovarchar med vissa data i den. Och resultatskärmen visar register över 7 anställda baserat på deras avdelningar, ålder etc.

Antag att det finns ett nytt tillägg av en anställd i organisationen och vi, som SQL-datautvecklare, skulle behöva infoga den nya posten i ovanstående tabell med hjälp av infoga SQL-sats. Nedan visas ett sådant exempel.,

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., Detta har inträffat eftersom kolumn efternamn varchar (10) kan hålla upp till 10 tecken och här försöker vi infoga en ny post med stränglängd (”Newton Hamilton”) som är klart större än 10 tecken. Som en snabb fix kan vi ändra tabellen och öka datatypen för SQL varchar-kolumnen, säg till varchar(50) för att infoga den nya raden. Utför nedanstående script för att ändra och infoga en ny post i tabellen., Dessutom kan du använda funktionerna LEN() och DATALENGTH() för att bestämma antalet tecken och lagringsstorleken i byte respektive som lagras i kolumnen varchar.

Vi observerade ovan hur vi kan ställa in eller ändra stränglängden i kolumnen SQL varchar för att möta affärsbehoven. Tänk dock på ett scenario där vi är osäkra på datastorleken som kommer att laddas i våra SQL-tabeller, under sådana omständigheter är det inte ett genomförbart val att inspektera och ändra datatypstorlek för varje kolumn., Ett av alternativen för att hantera detta kan vara att ställa in stränglängden på den högre stapeln i kolumnen SQL Server varchar(förutsatt att du har en grov uppskattning av vilken längd strängkolumnen skulle vara ungefär).

en viktig punkt att tänka på, kan vi använda stränglängd upp till varchar(8000) endast eftersom detta är det maximala antalet tecken som SQL varchar (n) datatyp kan hålla. Så i fall där det finns chanser att stränglängden för varchar-kolumnen kan överstiga 8000 byte, kommer det att resultera i ett fel med varchar(8001) eller något högre., 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 är en icke-Unicode stor variabel längd teckendatatyp och kan lagra högst 2^31-1 Byte (2 GB) av icke-Unicode-tecken.

När jag först introducerades till begreppen varchar(n) och SQL varchar, var den vanliga frågan som alla andra nybörjare jag hade, varför kan vi inte helt enkelt förklara en kolumn av datatyp varchar (8500) eller högre, eftersom vi har varchar(max) som tar hand om lagring upp till 2GB och varför ska vi antingen använda varchar(<=8000) eller varchar(max)?, Jag fick mina svar på lite forskning som SQL Server använder sidan för att lagra data och storleken på varje sida är 8KB(exklusive sidhuvudet, rad förskjutningar storlek). Om data som ska lagras är mindre än eller lika med 8000 byte, lagrar varchar(n) eller varchar(max) den i rad. Men om data överstiger 8000 byte storlek då det behandlas som ett stort objekt (LOB) och de lagras inte i rad men i separata LOB sidor(LOB_DATA)., Rad i sådana fall kommer endast att ha en pekare till LOB-datasidan där den faktiska data är närvarande och SQL Server tilldelar automatiskt en överflödesindikator till sidan för att manipulera datarader. I nötskal, om du vet att data kan överstiga 8000 byte, är det ett bättre alternativ att använda varchar(max) som datatyp.

Vi kan hänvisa till TRAFIKVERKET sys.dm_db_index_physical_stats för att se vilken typ av sida-anslaget (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) utförs., Du kan också kolla in den här länken om du vill ha detaljerad förklaring om hur SQL Server övar rad-och sidgränser med både varchar(n) och Varchar(max) datatyper.

låt oss snabbt hoppa över till SSMS och se hur vi kan använda varchar(max). Utför följande script för att infoga 1 post där stringcol-kolumnvärdet i varje rad är 15 000 B-tecken (dvs. 15 000 byte).

en begränsning av att använda varchar(max) är att vi inte kan skapa ett index som har en varchar(max) som en nyckelkolumn, istället är det lämpligt att göra ett fulltextindex på den kolumnen.,

en snabb anteckning att göra – härifrån till sista delen av den här artikeln kommer vi att nämna varchar i stället för varchar(n). Betrakta det inte som varchar med standardvärde = 1.

för att lära sig några mer intressanta skillnader mellan varchar(n) och Varchar(max) i SQL Server, överväga att gå igenom den här artikeln, jämföra varchar(max) vs Varchar(n) datatyper i SQL Server.

UTF-8 stöd med SQL Server 2019 CTP

innan vi gräver i vilken SQL Server 2019 förhandsgranskningsfunktion har att erbjuda för SQL varchar, låt oss snabbt titta på en mer intressant datatyp – ’nvarchar’ först., Liksom SQL Server varchar har vi SQL nvarchar , prefixet n i nvarchar betecknar Unicode, dvs det lagrar både Unicode och icke-Unicode-data. Nyckelskillnaden mellan varchar och nvarchar är hur de lagras, varchar lagras som vanlig 8-bitars data(1 byte per tecken) och nvarchar lagrar data på 2 byte per tecken. På grund av denna anledning kan nvarchar hålla upp till 4000 tecken och det tar dubbelt så mycket utrymme som SQL varchar. Du kan gå igenom den här länken för att lära dig mer om nvarchar i SQL Server.,

med den offentliga förhandsgranskningen av SQL Server 2019 har Microsoft meddelat stöd för UTF-8 teckenkodning till befintliga datatyper (varchar och char). För dem, som inte är medvetna om UTF-8, står det för Unicode Transformation Format och är en Unicode-baserad kodning som stöder många språk. 8 i UTF-8 betyder att den använder 1 byte (8-bitar) för att representera ett tecken i minnet. På samma sätt använder UTF-16 16 bitar (2 byte) för att representera ett tecken. Vi kommer att begränsa omfattningen av denna nya SQL Server 2019 CTP förbättring till ”SQL varchar” endast i den här artikeln.,

Denna förbättring har följande effekter i SQL Server är:

  1. Förbättrar Data kompatibilitet

    Tills SQL Server 2019 CTP, SQL varchar data typ hade kapacitet att lagra endast Icke-Unicode-data och med denna förhandsvisning, kan vi nu skapa en varchar-kolumn för att lagra Unicode-data enligt UTF-8 aktiverad sorteringarna (_UTF8). UTF-8 är tillåtet i varchar datatyper och aktiveras när du skapar eller ändrar ett objekts sortering till en sortering med UTF8 suffixet. Detta hjälper till att minimera karaktärskonverteringsproblem.,

  2. minskning av lagrings-och prestandaförbättringar

    UTF-8 stöd för varchar datatyp ger betydande lagringsbesparingar beroende på teckenuppsättningen som används. För t. ex., med hjälp av en UTF-8 aktiverad sortering, ändra kolumndatatyp från nvarchar (20) till varchar(20) erbjuder en betydande nedgång i lagringskrav eftersom nvarchar(20) kräver 40 byte för lagring och Varchar(20) behöver 20 byte för samma Unicode sträng.

viktig sidoanteckning – eftersom denna förbättring fortfarande är i förhandsgranskning kan vi förvänta oss fler framsteg på den här fronten inom en snar framtid., Men befintliga Unicode (UTF-16) datatyper (nchar, nvarchar och ntext) förblir oförändrade i SQL Server 2019 förhandsgranska.

sortering med SQL varchar i SQL Server 2019 CTP

sortering i SQL Server definierar konfigurationer för att bestämma olika regler som fallkänslighet, accentkänslighet, sortering, teckentyper och bredd etc. Förstå alla dessa egenskaper och hur de arbetar med dina data blir mycket viktigt. Sortering kan ställas in på server, databas, uttryck eller kolumnnivå., UTF-8 stöder databasnivå eller kolumnnivå sortering i SQL Server 2019 CTP och är aktiverad när du skapar eller ändrar databas eller kolumn sortering till en sortering med UTF8 suffix.

om du kör nedanstående fråga mot SQL Server 2019 CTP, kommer du att kunna se alla UTF-8 stöds collage på din instans av SQL Server med 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å så sätt tillämpas specifik sortering på den specifika kolumnens data utan att påverka resten av databasen.

eftersom vi har att göra med SQL Server varchar datatyp i det här inlägget, låt oss se hur Kolumnkollering med SQL varchar datatype fungerar. Utför koden nedan för att ändra Kolumnkolleringen för SQL Server Varchar från en sorteringstyp till suffixet _UTF8. Du kan läsa mer om Databas sortering härifrån.,Te tabell demovarcharcollate

(id int primärnyckel,
beskrivning varchar(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC inte NULL
);
ändra tabell demovarcharcollate
ändra KOLUMNBESKRIVNING varchar(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8 inte NULL;

Roll SQL varchar i DATAKONVERTERINGAR och datavisning

SQL Server varchar används ofta för att visa data i önskvärda format med hjälp av Konvertera och Cast-funktioner i SQL Server., Real data handlar om en blandning av datatyper och den måste vara kompatibel med varandra (dvs. tillhör samma datatyp) innan vi gör jämförelser med dem. SQL Server stöder både implicita och explicita konverteringar.

  • Obs: kolla in SQL CAST och SQL konvertera Funktionsöversikt för att få mer information om hur vi kan utföra dessa omvandlingar för datakompatibilitet.

med ett oupphörligt behov av formatering och visning av data i önskad utgång, SQL varchar kommer verkligen praktiskt., Som en SQL-utvecklare själv tycker jag det är extremt enkelt att använda konvertera/cast med varchar datatyp för att göra uppdrag eller transformationer på data, särskilt för datumfälten.

jag använder tabellen FactInternetSales från Provet DB AdventureWorksDW2017 för att visa hur den här funktionen fungerar. Du kan hänvisa till en tabell med vissa datetime och pengar/float fält för praktiken ändamål. Följande skript som konverterar datetime två kolumner till SQL varchar typer med stil 102 och 107 för att visa data i formatet åååå.mm.dd och Mon-dd, åååå respektive., SalesAmount-kolumnen med pengar som datatyp konverteras också till varchar och style 3 tillämpas för att visa beloppet med kommatecken som visas i skärmdumpen nedan. Dessutom, säg, Vi skulle vilja se data för de beställningar som placerats i år 2010 endast, med hjälp av CAST-funktionen för att konvertera datetime-kolumnen till varchar-data, strängjämförelsen utförs i WHERE-klausulen. Du kan också gå över SQL konvertera Datum för att hitta mer information om datum konverteringsformat och stilar.,

inverkan på stränglängden för SQL varchar med CAST och konvertera funktioner

SQL Server lagrar långa strängdata i den vanliga varchar-datatypen och det blir bra att veta de förväntade och maximala längderna för strängarna för att visa resultaten i användargränssnittet. Kopiera och kör nedanstående kod, där vi passerar en lång sträng i en ospecificerad längd varchar variabel (@demovarchar) och även i en annan variabel med en definierad varchar längd (@demovarcharwithcast)., Microsoft tar 30 som standard längd för SQL Varchar (med ospecificerad varchar längd) i SQL Server när den används med RÖSTERNA och KONVERTERA funktioner. I vårt fall, även om strängens längd var 52, returnerade den 30 som längden som visas i den sista resultatutgången.

en viktig punkt att notera här är att när ett ospecificerat längdfält skapas är standardlängden för ett sådant fält 1 (visas i röd färg nedan)., När varchar längd är ospecificerad och används med CAST eller konvertera funktioner returnerar CAST eller konvertera n=30 som standardstränglängden för denna konvertering (markerad i blå färg nedan).,l’) som ’LenOFStringPassed’

välj DATALENGTH(@demovarchar) som ’DefaultVarcharLength’
välj DATALENGtH(CAST(@demovarcharwithcast AS varchar(60))) som ’VarcharLengthSpecifiedWithCast’
välj DATALENGTH(CAST(@demovarcharwithcast AS varchar) som ’defaultvarcharlengthwithcast’

överväganden om lagring och prestanda med hjälp av SQL Varchar

datatyper som varchar, Char och nvarchar används alla för att lagra strängdata i SQL Server., SQL varchar lagrar variabel stränglängd medan SQL char lagrar fast stränglängd. Det betyder att SQL Server varchar bara innehåller de tecken vi tilldelar det och char håller det maximala kolumnutrymmet oavsett strängen det innehåller.

på grund av de fasta fältlängderna dras data direkt från kolumnen utan att göra någon datamanipulation och indexuppslag mot varchar är långsammare än för char-fält. CHAR är bättre än varchar performance wise, men det tar onödigt minnesutrymme när data inte har en fast längd., Så i de fall där diskstorleken inte är ett problem, rekommenderas att använda CHAR.

i enkla ord, säg att vi har en kolumn med Varchar(150) = ’SQLShack’ – det här tar 8 byte(sqlshack) + 2 byte för längdinformationen = 10 byte i faktisk och för kolumn med char(150) = ’SQLShack’ – det här kommer att konsumera hela 150 byte på disken, oavsett vad vi passerar som en sträng. Exemplet nedan visar hur CHAR använder det maximala tilldelade utrymmet (150) för att passa in i strängen som passerats och hur varchar-kolumnen endast använder det nödvändiga utrymmet.,

den nedersta raden är att använda den datatyp som passar vårt behov. Du kan använda SQL varchar när kolumnens storlekar varierar avsevärt, använd varchar (max) när det finns chanser att stränglängden kan överstiga 8000 byte, använd char när kolumnens storlekar är fasta och använd nvarchar om det finns ett krav på att lagra Unicode eller flerspråkig data.

slutsats

datatyper spelar en grundläggande roll i databasdesign, men de förbises ofta., En god förståelse och korrekt användning av datatyper säkerställer korrekt typ och längd av data fylls i tabellerna. Avsikten med detta tips är att hjälpa dig att få en förståelse för grundläggande egenskaper och funktioner i SQL Server varchar tillsammans med dess prestanda och lagringsaspekter i SQL Server. Vi täckte också de senaste framstegen i SQL varchar i SQL Server 2019 förhandsgranskning.

Se även

Du kan kolla in dessa andra artiklar för att fortsätta ditt lärande på SQL datatyper.,

  • förstå GUID-datatypen i SQL Server
  • rumsliga datatyper i SQL Server
  • författare
  • Senaste inlägg
Gauri är en SQL Server Professional och har 6+ års erfarenhet av att arbeta med globala multinationella konsult-och teknikorganisationer. Hon är mycket passionerad om att arbeta med SQL Server-ämnen som Azure SQL-databas, SQL Server Reporting Services, R, Python, Power BI, databasmotor, etc., Hon har många års erfarenhet av teknisk dokumentation och är förtjust i teknikförfattarskap.
hon har en djup erfarenhet av att utforma data-och analyslösningar och säkerställa dess stabilitet, tillförlitlighet och prestanda. Hon är också certifierad i SQL Server och har klarat certifieringar som 70-463: implementera datalager med Microsoft SQL Server.,
Visa alla inlägg från Gauri Mahajan

senaste inlägg från Gauri Mahajan (se alla)
  • utforska Azure analystjänster modell och Data – februari 4, 2021
  • komma igång med Azure analystjänster – januari 13, 2021
  • Anslut Azure Databricks data to Power BI Desktop – 1 juni 2020

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *