In dit artikel bekijken we het sql varchar gegevenstype inclusief een basisdefinitie en overzicht, verschillen met varchar(n), UTF-8 ondersteuning, collatie, prestatieoverwegingen en meer.
Data speelt een cruciale rol in elke organisatie en een attribuut waarmee het wordt gedefinieerd wordt het gegevenstype genoemd. In eenvoudige woorden, data type geeft aan wat voor soort gegevens elk object, variabele of expressie kan opslaan., Als een SQL Ontwikkelaar, terwijl het maken van een SQL tabel, moeten we begrijpen en beslissen welk type gegevens zal worden opgenomen door elke kolom in een tabel. Net als elke andere programmeertaal ondersteunt SQL ook een scala aan gegevenstypen die integer gegevens, datum-en tijdgegevens, karaktergegevens enz.kunnen bevatten. en stelt u in staat om uw eigen gegevenstypen te definiëren. SQL varchar is een van de bekendste en meest gebruikte gegevenstypen onder de partij. In dit artikel zullen we verschillende facetten van de SQL Server varchar in de SQL server doorlopen.
hieronder is de omtrek die we in dit blok zullen behandelen.,
- Inleiding tot het varchar-gegevenstype van de SQL Server in SQL Server
- gebruik van varchar voor grote tekstblokken
- Wat is nieuw in SQL Server 2019 preview voor varchar-gegevenstype?,
- invloed van collation op varchar SQL in SQL Server
- UTF-8 ondersteuning met varchar in SQL Server 2019 CTP
- SQL Server varchar voor gegevensconversies en gegevensweergave
- opslag-en prestatieoverwegingen met behulp van SQL Server varchar
- invloed op stringlengte van SQL varchar met CAST-en CONVERT-functies
en zie het bovengenoemde in actie.
dus wat is varchar in SQL?
zoals de naam al doet vermoeden, betekent varchar karaktergegevens die variëren., Ook bekend als variabel karakter, het is een onbepaald lengte string data type. Het kan nummers, letters en speciale tekens bevatten. Microsoft SQL Server 2008 (en hoger) kan maximaal 8000 tekens opslaan als de maximale lengte van de tekenreeks met varchar-gegevenstype. SQL varchar bevat meestal 1 byte per karakter en 2 bytes meer voor de lengte informatie. Het wordt aanbevolen om varchar als gegevenstype te gebruiken wanneer kolommen een variabele lengte hebben en de werkelijke gegevens veel minder zijn dan de opgegeven capaciteit. Laten we overschakelen naar SSM ‘ s en zien hoe varchar werkt.,
het volgende voorbeeld maakt drie variabelen (naam, geslacht en leeftijd) met varchar als gegevenstype en verschillende waarden die eraan worden toegekend. Zoals blijkt uit de resultaten die hieronder worden getoond, is standaard de string lengte van de SQL varchar kolommen 1 en het retourneert alleen de eerste waarde van de variabelen(de rest van de string wordt afgekapt) wanneer er geen string lengte wordt doorgegeven voor het varchar data type. Functie len () wordt gebruikt om het aantal tekens te bepalen dat is opgeslagen in de kolom varchar.
hoe verschilt SQL varchar(max) van varchar(n)?,
Er zijn momenten waarop SQL-ontwikkelaars (waaronder ikzelf) gewoonlijk varchar-datatype zonder lengte definiëren, en vervolgens niet in staat zijn stringrecords in de SQL-tabel in te voegen, dit komt omdat SQL Server 1 tekenruimte als standaardwaarde toewijst aan de varchar-kolom die zonder lengte is gedefinieerd. In praktische scenario ‘s, varchar(n) wordt gebruikt om variabele lengte waarde op te slaan als een string, hier’ n ‘ geeft de string lengte in bytes en het kan gaan tot 8000 tekens., Laten we nu verder gaan en zien hoe we SQL varchar-gegevens met een stringlengte kunnen opslaan in de kolom van een SQL-tabel. Hieronder script maakt de tabel Demovarchar met een aantal gegevens in het. En het resultaatscherm toont records van 7 werknemers op basis van hun afdelingen, leeftijd enz.
stel dat er een nieuwe toevoeging is van een werknemer in de organisatie en wij, als SQL data ontwikkelaars, zouden dit nieuwe record in de bovenstaande tabel moeten invoegen met SQL Statement invoegen. Hieronder is een dergelijk voorbeeld getoond.,
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., Dit is gebeurd omdat kolom achternaam varchar (10) maximaal 10 karakters kan bevatten en hier proberen we een nieuw record in te voegen met een stringlengte(‘Newton Hamilton’) die duidelijk groter is dan 10 karakters. Als een snelle oplossing kunnen we de tabel wijzigen en het gegevenstype van de kolom SQL varchar vergroten, bijvoorbeeld naar varchar(50) om de nieuwe rij in te voegen. Voer het onderstaande script uit om een nieuw record te wijzigen en in te voegen in de tabel., Daarnaast kunt u LEN() en DATALENGTH () functies gebruiken om het aantal karakters en de opslaggrootte in bytes respectievelijk te bepalen die zijn opgeslagen in de kolom varchar.
we hebben hierboven gezien hoe we de stringlengte in de kolom SQL varchar kunnen instellen of wijzigen om aan de zakelijke behoeften te voldoen. Overweeg echter een scenario, waar we niet zeker zijn van de gegevensgrootte die in onze SQL-tabellen zal worden geladen, in dergelijke omstandigheden, is het inspecteren en wijzigen van de grootte van het gegevenstype voor elke kolom geen haalbare keuze., Een van de opties om dit af te handelen is om de string lengte in te stellen op de hogere balk in de SQL Server varchar kolom (mits je een ruwe schatting hebt van de lengte van de string kolom ongeveer zou zijn).
een belangrijk punt om rekening mee te houden, we kunnen string Lengte gebruiken tot varchar(8000) alleen omdat dit het maximum aantal tekens is dat SQL varchar(n) data type kan bevatten. Dus in gevallen waarin er kans is dat de string lengte van de varchar kolom 8000 bytes kan overschrijden, zal het gebruik van varchar(8001) of iets hoger resulteren in een fout., 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)., Het is een niet-Unicode groot variabele lengte karakter data type en kan maximaal 2^31-1 bytes (2 GB) van niet-Unicode tekens op te slaan.
toen ik voor het eerst kennis maakte met de concepten varchar(n) en SQL varchar, was de veel voorkomende vraag zoals elke andere beginner die ik had, waarom kunnen we niet gewoon een kolom van het gegevenstype varchar(8500) of hoger declareren, aangezien we varchar(max) hebben die zorgt voor opslag tot 2GB en waarom moeten we varchar(<=8000) of varchar(max) gebruiken?, Ik kreeg mijn antwoorden op een beetje onderzoek dat SQL Server gebruikt pagina om gegevens op te slaan en de grootte van elke pagina is 8KB(met uitzondering van pagina header, rij offsets grootte). Als de op te slaan gegevens minder dan of gelijk zijn aan 8000 bytes, slaat varchar(n) of varchar(max) het in-rij op. Echter, als de data de 8000 byte grootte overschrijdt dan wordt het behandeld als een groot Object(LOB) en ze worden niet in-rij opgeslagen, maar in afzonderlijke LOB pagina ‘ s(LOB_DATA)., Row heeft in dat geval alleen een verwijzing naar de LOB-gegevenspagina waar de werkelijke gegevens aanwezig zijn en SQL Server wijst automatisch een overflow-indicator toe aan de pagina om gegevensrijen te manipuleren. In het kort, als je weet dat de gegevens 8000 byte kunnen overschrijden, is het een betere optie om varchar(max) als het gegevenstype te gebruiken.
we kunnen verwijzen naar de DMV sys. dm_db_index_physical_stats om te zien wat voor soort paginallocatie (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) wordt uitgevoerd., U kunt ook deze link bekijken voor het geval u gedetailleerde uitleg wilt over hoe SQL Server rij-en paginalimieten oefent met zowel varchar(n) als varchar (max) gegevenstypen.
laten we snel naar SSM ‘ s springen en zien hoe we varchar(max) kunnen gebruiken. Voer het volgende script uit om 1 record in te voegen waar de stringcol-kolomwaarde in elke rij 15.000 B-tekens is (d.w.z. 15.000 bytes).
een beperking van het gebruik van varchar(max) is dat we geen index kunnen maken met een varchar(max) als sleutelkolom, in plaats daarvan is het raadzaam om een Full-text index op die kolom te maken.,
een korte opmerking – van hier tot het laatste deel van dit artikel zullen we varchar noemen in plaats van varchar(n). Beschouw het niet als de varchar met standaardwaarde = 1.
om wat meer interessante verschillen tussen varchar(n) en varchar(max) in SQL Server te leren, overweeg dan om dit artikel door te nemen, door VARCHAR(max) versus VARCHAR(n) gegevenstypen in SQL Server te vergelijken.
UTF-8 ondersteuning met SQL Server 2019 CTP
voordat we graven in wat SQL Server 2019 preview functie te bieden heeft voor SQL varchar, laten we snel kijken naar een meer interessante data type – ‘nvarchar’ eerste., Net als SQL Server varchar hebben we SQL nvarchar , het voorvoegsel n in nvarchar staat voor Unicode, dat wil zeggen dat het zowel Unicode-als niet-Unicode-gegevens opslaat. Het belangrijkste verschil tussen varchar en nvarchar is de manier waarop ze worden opgeslagen, varchar wordt opgeslagen als reguliere 8-bit gegevens(1 byte per karakter) en nvarchar slaat gegevens op 2 bytes per karakter. Als gevolg van deze reden, nvarchar kan houden tot 4000 tekens en het neemt het dubbele van de ruimte als SQL varchar. U kunt via deze link meer te weten komen over nvarchar in SQL Server.,
met de openbare preview van SQL Server 2019 heeft Microsoft de ondersteuning aangekondigd voor UTF-8-tekencodering voor de bestaande gegevenstypen (varchar en char). Voor degenen, die zich niet bewust zijn van UTF-8, Het staat voor Unicode Transformation Format en is een Unicode-gebaseerde codering die vele talen ondersteunt. De 8 in UTF-8 betekent dat het 1 byte (8-bits) gebruikt om een karakter in het geheugen weer te geven. Op dezelfde manier gebruikt UTF-16 16 bits (2 bytes) om een karakter te representeren. We zullen de scope van deze nieuwe SQL Server 2019 CTP enhancement beperken tot ‘SQL varchar’ alleen in dit artikel.,
deze verbetering heeft de volgende impact in SQL Server: is
- verbetert de compatibiliteit van gegevens
totdat SQL Server 2019 CTP, SQL varchar gegevenstype de capaciteit had om alleen niet-Unicode-gegevens op te slaan en met dit voorbeeld kunnen we nu een varchar-kolom maken om Unicode-gegevens op te slaan onder UTF-8-ingeschakelde collaties (_UTF8). UTF-8 is toegestaan in de varchar datatypes en is ingeschakeld bij het maken of wijzigen van een object collatie naar een collatie met het UTF8 achtervoegsel. Dit helpt bij het minimaliseren van karakter conversie problemen.,
- vermindering van opslag en prestatieverbeteringen
UTF-8-ondersteuning voor varchar-gegevenstype levert aanzienlijke opslagbesparingen op, afhankelijk van de tekenset die wordt gebruikt. Voor bijvoorbeeld, het gebruik van een UTF-8 enabled collation, het veranderen van het kolom data type van nvarchar(20) naar varchar(20) biedt een significante daling van de opslagvereisten aangezien nvarchar(20) 40 bytes vereist voor opslag en varchar(20) 20 bytes nodig heeft voor dezelfde Unicode string.
belangrijke kanttekening-aangezien deze verbetering nog steeds in preview is, kunnen we in de nabije toekomst meer progressies op dit front verwachten., Bestaande Unicode (UTF-16) gegevenstypen (nchar, nvarchar en ntext) blijven echter ongewijzigd in SQL Server 2019 preview.
Collation with SQL varchar in SQL Server 2019 CTP
Collation in SQL Server definieert configuraties om verschillende regels te bepalen, zoals hoofdlettergevoeligheid, accentgevoeligheid, sortering, tekentypen en breedte, enz. Het begrijpen van al deze eigenschappen en hoe ze werken met uw gegevens worden erg belangrijk. Collation kan worden ingesteld op server -, database -, expressie-of kolomniveau., UTF-8 ondersteunt collation op databaseniveau of kolomniveau in SQL Server 2019 CTP en is ingeschakeld wanneer u een Collation op Database-of kolomniveau maakt of wijzigt in een collation met UTF8-achtervoegsel.
Als u de onderstaande query uitvoert op SQL Server 2019 CTP, kunt u alle UTF-8 ondersteunde collaties zien op uw SQL Server-instantie met behulp van de functie (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., Op deze manier wordt specifieke collatie toegepast op de gegevens van de betreffende kolom zonder de rest van de database te beïnvloeden.
aangezien we te maken hebben met SQL Server varchar data type in dit bericht, laten we eens kijken hoe kolom collatie met SQL varchar datatype werkt. Voer de onderstaande code uit om de SQL Server varchar Kolomverzameling te wijzigen van één type collatie naar _UTF8 achtervoegsel. U kunt meer lezen over Database Collation van hier.,TE TABEL demovarcharcollate
Rol van SQL varchar in data conversies en weergave van gegevens
SQL Server varchar wordt op grote schaal gebruikt in de weergave van gegevens in de gewenste formaten met behulp van Zetten en richt functies in SQL Server., Real data gaat over een mix van gegevenstypen en het moet compatibel zijn met elkaar (dat wil zeggen behoren tot hetzelfde gegevenstype), voordat we vergelijkingen met hen maken. SQL Server ondersteunt zowel impliciete als expliciete conversies.
- Note: Check out SQL CAST and SQL CONVERT function overview om meer informatie te krijgen over hoe we deze conversies kunnen uitvoeren voor gegevenscompatibiliteit.
met een onophoudelijke behoefte aan het formatteren en weergeven van gegevens in de vereiste uitvoer, is sql varchar erg handig., Als SQL ontwikkelaar zelf, Ik vind het zeer eenvoudig om te gebruiken convert / cast met varchar data type om opdrachten of transformaties op gegevens te maken, vooral voor de datum velden.
Ik gebruik Tabelfactinternetsales uit voorbeeld DB AdventureWorksDW2017 om te laten zien hoe deze functie werkt. U kunt verwijzen naar een tabel met een aantal DateTime en geld/float velden voor de praktijk doel. Het volgende script converteert twee DateTime-kolommen naar SQL varchar-typen met stijl 102 en 107 om de gegevens in het formaat yyyy.MM.dd en Mon dd, yyyy weer te geven respectievelijk., Ook de SalesAmount kolom met geld als gegevenstype wordt geconverteerd naar varchar en stijl 3 wordt toegepast om het bedrag met komma ‘ s weer te geven zoals weergegeven in de screenshot hieronder. Bovendien zouden we bijvoorbeeld alleen gegevens willen zien voor de bestellingen die in het jaar 2010 zijn geplaatst, met behulp van de CAST-functie om de datetime-kolom om te zetten in varchar-gegevens, de stringvergelijking wordt uitgevoerd in de WHERE-clausule. U kunt ook gaan over SQL convert date om meer informatie over Datum conversie formaten en stijlen te vinden.,
invloed op string lengte van SQL varchar met CAST en CONVERT functies
SQL Server slaat lange string data op in het veelgebruikte varchar data type en het wordt nuttig om de verwachte en maximale lengte van de strings te kennen om de resultaten in de UI weer te geven. Kopieer en voer de onderstaande code uit, waarbij we een lange string doorgeven in een onbepaalde lengte varchar variabele (@demovarchar) en ook in een andere variabele met een gedefinieerde varchar lengte (@demovarcharwithcast)., Microsoft neemt 30 als de standaard lengte voor SQL Varchar (met niet-gespecificeerde varchar lengte) in de SQL Server wanneer het wordt gebruikt met CAST en CONVERT functies. In ons geval, hoewel de lengte van de string 52 was, gaf het 30 terug als de lengte zoals getoond in het laatste resultaat uitvoer.
een belangrijk punt om hier op te merken is dat wanneer een onbekend varchar-veld wordt gemaakt, de standaardlengte van een dergelijk veld 1 is (hieronder in rode kleur)., Wanneer varchar lengte is niet gespecificeerd en wordt gebruikt met CAST of CONVERT functies, de CAST of CONVERT retourneert n = 30 als de standaard string lengte van deze conversie (gemarkeerd in blauwe kleur hieronder).,le’) ALS ‘LenOFStringPassed’
Opslag en prestaties met behulp van SQL varchar
Data types zoals varchar, char en nvarchar zijn al gebruikt voor het opslaan van string-gegevens in SQL Server., SQL varchar slaat variabele string lengte terwijl SQL char slaat vaste string lengte. Dit betekent dat SQL Server varchar alleen de karakters bevat die we eraan toewijzen en dat char de maximale kolomruimte bevat, ongeacht de string die het bevat.
vanwege de vaste veldlengtes worden gegevens rechtstreeks uit de kolom getrokken zonder dat er gegevens worden gemanipuleerd en index-lookups tegen varchar zijn langzamer dan die van char-velden. CHAR is beter dan VARCHAR performance verstandig, echter, het kost onnodige geheugenruimte wanneer de gegevens geen vaste lengte hebben., Dus in gevallen waar schijfgrootte geen probleem is, is het raadzaam om CHAR te gebruiken.
in eenvoudige woorden, stel dat we een kolom met varchar(150) = ‘SQLShack’ – dit zal 8 bytes(sqlshack) + 2 bytes voor de lengte informatie = 10 bytes in werkelijke en voor kolom met char (150) = ‘SQLShack’ – dit zal hele 150 bytes op schijf verbruiken, ongeacht wat we doorgeven als een string. Het onderstaande voorbeeld laat zien hoe CHAR de maximaal toegewezen ruimte (150) gebruikt om in de doorgegeven tekenreeks te passen en hoe varchar kolom alleen de benodigde ruimte gebruikt.,
Bottom line is het gebruik van het gegevenstype dat past bij onze behoefte. U kunt SQL varchar gebruiken als de grootte van de kolom aanzienlijk varieert, varchar(max) gebruiken als er kans is dat de stringlengte 8000 bytes kan overschrijden, char gebruiken als de grootte van de kolom vast is en nvarchar gebruiken als er een vereiste is om Unicode of meertalige gegevens op te slaan.
conclusie
gegevenstypen spelen een fundamentele rol in het ontwerp van databases, maar ze worden vaak over het hoofd gezien., Een goed begrip en nauwkeurig gebruik van gegevenstypen zorgen ervoor dat de juiste aard en lengte van de gegevens in de tabellen worden ingevuld. De bedoeling van deze tip is om u te helpen een inzicht te krijgen in de basiskenmerken en functies van SQL Server varchar, samen met de prestaties en opslag aspecten in SQL Server. We hebben ook recente ontwikkelingen in SQL varchar behandeld in de SQL Server 2019 Preview.
zie ook
u kunt deze andere artikelen bekijken om verder te leren op SQL datatypes.,
- Inzicht in de GUID gegevenstype in SQL Server
- Ruimtelijke gegevenstypen in SQL Server
- Auteur
- Laatste Berichten
ze heeft een diepe ervaring in het ontwerpen van data – en analyseoplossingen en het waarborgen van de stabiliteit, betrouwbaarheid en prestaties ervan. Ze is ook gecertificeerd in SQL Server en is geslaagd voor certificeringen zoals 70-463: implementeren van Data Warehouses met Microsoft SQL Server.,
Bekijk alle berichten van Gauri Mahajan
- Verkennen Azure Analysis Services-Model en Data – februari 4, 2021
- Aan de slag met Azure Analysis Services – 13 januari 2021
- Connect Azure Databricks gegevens aan de Macht BI-Desktop – juni 1, 2020
Geef een reactie