SQLShack (Čeština)

posted in: Articles | 0

V tomto článku se podíváme na SQL typ dat varchar včetně základní definice a přehled, rozdíly z varchar(n), podporu UTF-8, Řazení, výkon úvahy a další.

Data hrají klíčovou roli v každé organizaci a atribut, kterým je definován, se nazývá její datový typ. Jednoduše řečeno, datový typ uvádí, jaký druh dat může jakýkoli objekt, proměnná nebo výraz uložit., Jako vývojář SQL musíme při vytváření tabulky SQL pochopit a rozhodnout, jaký typ dat bude obsažen každým sloupcem v tabulce. Jako každý jiný programovací jazyk, SQL také podporuje celou škálu typů dat, které mohou držet celé číslo, údaje, datum a čas data, znaková data atd. a umožňuje také definovat vlastní datové typy. SQL varchar je jedním z nejznámějších a nejpoužívanějších datových typů mezi šarží. V tomto článku budeme procházet různými aspekty SQL serveru varchar v serveru SQL.

níže je obrys, který v tomto bloku pokryjeme.,

  1. Úvod do SQL Server typ dat varchar v SQL Server
  2. Použití varchar pro velké bloky textu
  3. Co je nového v serveru SQL Server 2019 náhled pro varchar datový typ?,
  4. Vliv řazení na varchar SQL v SQL Server
  5. podporu UTF-8 s varchar v SQL Server 2019 CTP
  6. Serveru SQL varchar pro datové konverze a zobrazení dat
  7. Ukládání a výkonu pomocí SQL Server varchar
  8. Dopad na řetězec délky SQL varchar s HERCI a PŘEVÉST funkce

Pojďme se přesunout dopředu a vidět, uvedené v akci.

takže co je varchar v SQL?

jak název napovídá, varchar znamená znaková data, která se liší., Také známý jako variabilní znak, jedná se o neurčitou délku řetězce datového typu. Může obsahovat čísla, písmena a speciální znaky. Microsoft SQL Server 2008 (a výše) může ukládat až 8000 znaků jako maximální délku řetězce pomocí datového typu varchar. SQL varchar obvykle drží 1 bajt na znak a 2 další bajty pro informace o délce. Varchar se doporučuje používat jako datový typ, pokud mají sloupce proměnnou délku a skutečná data jsou mnohem menší než daná kapacita. Pojďme přejít na SSMS a uvidíme, jak varchar funguje.,

následující příklad vytváří tři proměnné (jméno, pohlaví a věk) s varcharem jako datový typ a různé hodnoty, které jsou jim přiřazeny. Jak je zřejmé z níže uvedených množin výsledků, ve výchozím nastavení je délka řetězce sloupců SQL varchar 1 a vrací pouze první hodnotu proměnných (zbytek zkráceného řetězce), pokud není pro datový typ varchar předána žádná délka řetězce. Funkce len () se používá k určení počtu znaků uložených ve sloupci varchar.

jak se SQL varchar(max) liší od varchar(n)?,

jsou chvíle, kdy SQL vývojářů (včetně mě) obvykle definovat datový typ varchar, aniž délku, a následně se nepodařilo vložit řetězec záznamy v SQL tabulce, je to proto, že SQL Server přiděluje 1 charakter prostoru jako výchozí hodnota varchar sloupec, který je definován bez jakékoli délky. V praktických scénářích se varchar (n) používá k ukládání hodnoty proměnné délky jako řetězce, zde ‚n‘ označuje délku řetězce v bajtech a může jít až na 8000 znaků., Nyní pokračujeme dále a uvidíme, jak můžeme ukládat data SQL varchar s délkou řetězce do sloupce tabulky SQL. Níže skript vytvoří tabulku Demovarchar s některými daty v něm. A obrazovka výsledků zobrazuje záznamy 7 zaměstnanců na základě jejich oddělení, věku atd.

Předpokládám, že tam je nový přírůstek zaměstnance v organizaci, a my, jako dat SQL vývojáři, by musel vložit nový záznam do výše uvedené tabulky pomocí INSERT SQL. Níže je uveden jeden takový příklad.,

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., K tomu došlo proto, sloupec Příjmení varchar(10) může obsahovat až 10 znaků a tady se pokoušíme vložit nový záznam s řetězci length(‚Newton Hamilton‘), které je jednoznačně větší než 10 znaků. Jako rychlou opravu můžeme tabulku změnit a zvýšit datový typ sloupce SQL varchar, řekněme varchar(50) pro vložení nového řádku. Proveďte níže uvedený skript pro změnu a vložení nového záznamu do tabulky., Kromě toho můžete pomocí funkcí LEN() a DATALENGTH() určit počet znaků a velikost úložiště v bajtech, které jsou uloženy ve sloupci varchar.

Pozorovali jsme výše, jak můžeme nastavit nebo změnit délku řetězce ve sloupci SQL varchar tak, aby vyhovovaly obchodním potřebám. Zvažte však scénář, kde si nejsme jisti velikostí dat, která bude načtena do našich tabulek SQL, za takových okolností není kontrola a změna velikosti datového typu pro každý sloupec životaschopnou volbou., Jednou z možností, jak to zvládnout, je nastavit délku řetězce na vyšší liště ve sloupci SQL Server varchar (za předpokladu, že máte hrubý odhad, jaká délka sloupce řetězce by byla přibližně).

je důležité, aby mějte na vědomí, můžeme použít řetězec délky varchar(8000) pouze v případě, že je maximální počet znaků, které SQL varchar(n) typ dat může držet. Takže v případech, kdy existuje šance, že délka řetězce sloupce varchar může překročit 8000 bajtů, pomocí varchar(8001) nebo něco vyššího bude mít za následek chybu., 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)., Jedná se o datový typ znaků bez Unicode s velkou proměnnou délkou a může ukládat maximálně 2^31-1 bajtů (2 GB) znaků bez Unicode.

Když jsem se dostal poprvé představen na pojmy varchar(n) a SQL varchar, na společnou otázku jako každý jiný začátečník, co jsem měl, byl důvod, proč nemůžeme jednoduše prohlásit, sloupec typ dat varchar(8500) nebo vyšší, protože máme varchar(max), který se stará o skladování až 2 gb a proč je máme použít buď varchar(<=8000) nebo varchar(max)?, Dostal jsem odpovědi na malý výzkum, že SQL Server používá stránku pro ukládání dat a velikost každé stránky je 8KB (s výjimkou záhlaví stránky, velikost řádku offsets). Pokud jsou data, která mají být uložena, menší nebo rovna 8000 bajtům, uloží je varchar(n) nebo varchar(max) v řadě. Nicméně, pokud data překročí 8000 bajtů velikost pak je s ním zacházeno jako Large Object(LOB) a nejsou uloženy v řadě, ale v samostatném LOB stránek(LOB_DATA)., Řádek v takovém případě bude mít pouze ukazatel na LOB data stránku, kde skutečná data, je přítomen, a SQL Server automaticky přiřadí over-flow ukazatel na stránku k manipulaci s daty řádky. Stručně řečeno, pokud víte, že data mohou překročit 8000 bajtů, je lepší použít varchar(max) jako datový typ.

můžeme se odkázat na DMV sys.dm_db_index_physical_stats vidět, jaké stránky alokace (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) se provádí., Můžete se také podívat na tento odkaz, v případě, že chcete podrobné vysvětlení o tom, jak SQL Server cvičení řádek a stránka limity s oběma varchar(n) varchar(max) datové typy.

pojďme rychle přejít na SSMS a uvidíme, jak můžeme použít varchar(max). Proveďte následující skript a vložte 1 záznam, kde hodnota sloupce StringCol v každém řádku je 15 000 znaků B (tj. 15 000 bajtů).

Jedním z omezení použití varchar(max), je, že jsme nelze vytvořit index, který má varchar(max) jako klíčový sloupec, místo toho je vhodné, aby fulltextového indexu na sloupci.,

rychlá poznámka – odtud do poslední etapy tohoto článku se zmíníme o varcharovi místo varcharu (n). Nepovažujte to za varchar s výchozí hodnotou = 1.

naučit Se nějaké další zajímavé rozdíly mezi varchar(n) varchar(max) v SQL Server, zvažte jít přes tento článek, Srovnání VARCHAR(max) vs VARCHAR(n) datových typů v SQL Server.

UTF-8 podpora s SQL Server 2019 CTP

než se podíváme na to, co funkce náhledu SQL Server 2019 nabízí pro SQL varchar, pojďme se rychle podívat na další zajímavý typ dat – nejprve „nvarchar“., Stejně jako SQL Server varchar , máme SQL nvarchar , předpona n v nvarchar označuje Unicode, tj. ukládá jak Unicode, tak data bez Unicode. Klíčový rozdíl mezi varchar a nvarchar je způsob, jak jsou uloženy, varchar se ukládá jako pravidelné 8-bit data(1 byte na znak) a nvarchar ukládá data na 2 bajty na znak. Z tohoto důvodu může nvarchar pojmout až 4000 znaků a zabírá dvojnásobek místa jako SQL varchar. Můžete jít přes tento odkaz se dozvědět více o nvarchar v SQL Server.,

s veřejným náhledem SQL Serveru 2019 společnost Microsoft oznámila podporu kódování znaků UTF-8 stávajícím datovým typům (varchar A char). Pro ty, kteří si nejsou vědomi UTF-8, znamená Formát transformace Unicode a je kódování založené na Unicode, které podporuje mnoho jazyků. 8 v UTF-8 znamená, že používá 1 bajt (8-bitů), aby reprezentoval znak v paměti. Stejně tak UTF-16 používá 16 bitů (2 bajty) k reprezentaci znaku. Omezíme rozsah tohoto nového vylepšení CTP serveru SQL Server 2019 na „SQL varchar“ pouze v tomto článku.,

Toto vylepšení má následující dopad v SQL Serveru:

  1. Zlepšuje Dat kompatibilita

    , Dokud serveru SQL Server 2019 CTP, SQL varchar typ dat má kapacitu k uložení pouze dat-Unicode a s náhled, můžeme nyní vytvořit varchar sloupec pro ukládání Unicode dat pod UTF-8 povoleno kolace (_UTF8). UTF-8 je povoleno v varchar datové typy a je povoleno při vytváření nebo změně objektu řazení na řazení s UTF8 přípony. To pomáhá při minimalizaci problémů s konverzí znaků.,

  2. snížení vylepšení úložiště a výkonu

    podpora UTF-8 pro datový typ varchar poskytuje značné úspory úložiště v závislosti na použitém znaku. Pro např, pomocí UTF-8 povoleno řazení, změna sloupec datový typ nvarchar(20) varchar(20), nabízí výrazný pokles požadavky na skladování, od nvarchar(20) vyžaduje 40 bajtů pro ukládání a varchar(20) je třeba 20 bajtů pro stejný řetězec Unicode.

důležitá boční poznámka-protože toto vylepšení je stále v náhledu, můžeme v blízké budoucnosti očekávat další pokroky na této frontě., Existující datové typy Unicode (UTF-16) (nchar, nvarchar a ntext) však zůstávají v náhledu SQL Server 2019 nezměněny.

Collation with SQL varchar in SQL Server 2019 CTP

Collation in SQL Server definuje konfigurace pro určení různých pravidel, jako je citlivost případu, citlivost přízvuku, třídění, typy znaků a šířka atd. Pochopení všech těchto vlastností a jak pracují s vašimi daty se stávají velmi důležitými. Řazení lze nastavit na úrovni serveru, databáze, výrazu nebo sloupce., UTF-8 podporuje databáze na úrovni nebo sloupec úroveň kolace v SQL Server 2019 CTP a je povoleno při vytváření nebo změně Databáze nebo sloupec řazení na řazení s UTF8 přípony.

Pokud provedete níže dotaz na SQL Server 2019 CTP, budete moci vidět všechny UTF-8 podporované kolace na instanci serveru SQL Server pomocí funkce (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., Tímto způsobem se na data konkrétního sloupce aplikuje specifická kollace, aniž by to ovlivnilo zbytek databáze.

protože se v tomto příspěvku zabýváme datovým typem SQL Serveru varchar, podívejme se, jak funguje Kollace sloupců s datovým typem SQL varchar. Proveďte kód níže změnit SQL Server varchar kolony z jednoho typu koláže na _utf8 příponu. Více informací o databázové koláži si můžete přečíst zde.,TE TABULCE demovarcharcollate

(ID int PRIMARY KEY,
Popis varchar(50) SKLÁDAT LATIN1_GENERAL_100_CI_AS_SC NENÍ NULL
);
ALTER TABLE demovarcharcollate
ALTER SLOUPEC Popis varchar(50) SKLÁDAT LATIN1_GENERAL_100_CI_AS_SC_UTF8 not NULL;

Role SQL varchar v datové konverze a zobrazení dat

SQL Server varchar je široce používán v zobrazení dat v žádoucí používající přípony Převod a Obsazení funkcí v SQL Server., Reálná data se zabývají kombinací datových typů a musí být vzájemně kompatibilní (tj. patří ke stejnému datovému typu), než je porovnáme. SQL Server podporuje implicitní i explicitní konverze.

  • poznámka: podívejte se na Přehled funkcí SQL CAST a SQL CONVERT a získejte více informací o tom, jak můžeme tyto konverze provádět pro kompatibilitu s daty.

s neustálou potřebou formátování a zobrazování dat v požadovaném výstupu se SQL varchar opravdu hodí., Jako vývojář SQL sám, považuji za velmi jednoduché použít convert / cast s datovým typem varchar pro přiřazení nebo transformace dat, zejména pro pole data.

používám table FactInternetSales ze vzorku dB AdventureWorksDW2017, abych ukázal, jak tato funkce funguje. Můžete odkazovat na libovolnou tabulku s některými poli datetime a money/float pro účely praxe. Následující skript převádí dva sloupce datetime na typy SQL varchar se stylem 102 a 107 pro zobrazení dat ve formátu yyyy.mm.DD a Mon dd, yyyy., Také, SalesAmount sloupec s Penězi jako datový typ je převést na varchar a styl 3 je použita pro zobrazení množství čárkami, jak je znázorněno na obrázku níže. Navíc, řekněme, bychom chtěli zobrazit údaje pro objednávky v roce 2010 pouze pomocí OBSAZENÍ funkce pro převod datetime sloupec varchar data, řetězec porovnání se provádí v klauzuli where. Můžete také přejít na SQL convert date a najít více informací o formátech a stylech převodu data.,

Dopad na řetězec délky SQL varchar s HERCI a PŘEVÉST funkce

SQL Server ukládá dlouhý řetězec dat v běžně používaných varchar typ dat, a to se stává užitečné vědět, očekávané a maximální délky řetězce pro zobrazení výsledků v UI. Zkopírovat a spustit kód níže, kde míjíme dlouhý řetězec v nespecifikované délky varchar proměnná (@demovarchar) a také v další proměnnou s definovanými varchar délka (@demovarcharwithcast)., Microsoft bere 30 jako výchozí délku pro SQL Varchar (s nespecifikovanou délkou varchar) v SQL Serveru, když se používá s funkcí CAST a CONVERT. V našem případě, i když délka řetězce byla 52, vrátila se 30 jako délka, jak je znázorněno na výstupu posledního výsledku.

jedním důležitým bodem, který je třeba poznamenat, je to, že když je vytvořeno nespecifikované pole varchar délky, výchozí délka takového pole je 1 (zobrazeno v červené barvě níže)., Když je délka varcharu nespecifikována a používá se s funkcemi CAST nebo CONVERT, vrátí CAST nebo CONVERT N=30 jako výchozí délku řetězce této konverze (označené modrou barvou níže).,le‘) JAKO ‚LenOFStringPassed‘

VYBERTE DATADÉLKA(@demovarchar) JAKO ‚DefaultVarcharLength‘
VYBERTE Datadélka(CAST(@demovarcharwithcast JAKO varchar(60))) JAKO ‚VarcharLengthSpecifiedWithCast‘
VYBERTE DATADÉLKA(CAST(@demovarcharwithcast JAKO varchar)) JAKO DefaultVarcharLengthWithCast‘

Úložiště a výkonu pomocí SQL varchar

Datové typy, jako varchar, char a nvarchar jsou všechny použité store string data v SQL Serveru., SQL varchar ukládá proměnnou délku řetězce, zatímco SQL char ukládá pevnou délku řetězce. To znamená, že SQL Server varchar obsahuje pouze znaky, které mu přiřadíme, A char drží maximální prostor sloupce bez ohledu na řetězec, který drží.

díky pevné pole délky, data jsou vytáhl přímo ze sloupce, aniž by dělali nějaké manipulaci s daty a index vyhledávání proti varchar jsou pomalejší než char pole. CHAR je lepší než VARCHAR výkon moudrý, nicméně, to trvá zbytečný paměťový prostor, když data nemají pevnou délku., Takže v případech, kdy velikost disku není problém, doporučuje se použít CHAR.

V jednoduchých slov, že máme sloupec s varchar(150) = ‚SQLShack‘ – To bude trvat 8 bajtů(sqlshack) + 2 bajty pro délku informací = 10 bajtů v aktuální a pro sloupce s char(150) = ‚SQLShack‘ – To bude konzumovat celý 150 bajtů na disku, bez ohledu na to, co jsme se projít jako řetězec. Níže uvedený příklad ukazuje, jak CHAR používá maximální přidělený prostor (150), aby se vešel do předaného řetězce a jak sloupec varchar používá pouze potřebný prostor.,

Sečteno a podtrženo je použití datového typu, který vyhovuje naší potřebě. Můžete použít SQL varchar při velikosti sloupec značně lišit, použití varchar(max), když existuje šance, že délka řetězce může přesáhnout 8000 bajtů, použijte char při velikosti sloupce jsou pevné a použití nvarchar, pokud je požadavek na ukládání Unicode nebo vícejazyčná data.

závěr

datové typy hrají zásadní roli v návrhu databáze, ale jsou často přehlíženy., Dobré porozumění a přesné používání datových typů zajišťuje správnou povahu a délku dat v tabulkách. Záměrem tohoto tipu je pomoci vám pochopit základní vlastnosti a vlastnosti SQL serveru varchar spolu s jeho aspekty výkonu a ukládání v SQL Serveru. Také jsme se zabývali nedávnými pokroky v SQL varchar v náhledu SQL Server 2019.

Viz také

můžete se podívat na tyto další články a pokračovat v učení na datových typech SQL.,

  • Pochopení GUID datový typ v SQL Server
  • Prostorové datové typy v SQL Server
  • Autora
  • Poslední Příspěvky
Gauri je SQL Server Profesionální a má 6+ let zkušeností s prací s globální nadnárodní konzultační a technologická organizace. Je velmi vášnivá pro práci na tématech SQL Serveru, jako je Azure SQL Database, SQL Server Reporting Services, R, Python, Power BI, databázový stroj atd., Má dlouholeté zkušenosti s technickou dokumentací a má rád autorství technologií.
má hluboké zkušenosti s navrhováním datových a analytických řešení a zajištěním jejich stability, spolehlivosti a výkonu. Je také certifikována v SQL Serveru a prošla certifikacemi jako 70-463: implementace datových skladů pomocí Microsoft SQL Server.,
Zobrazit všechny příspěvky od Gauri Mahajan

Nejnovější příspěvky Gauri Mahajan (zobrazit všechny)
  • Prozkoumat Azurové Analysis Services Model a Data – 4. února 2021
  • začínáme s Azure Analysis Services – 13. ledna 2021
  • Připojte přehrávač Azure Databricks dat pro Power BI Desktop – 1. června 2020

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *