SQLShack (Magyar)

posted in: Articles | 0

ebben a cikkben áttekintjük az SQL varchar adattípust, beleértve az alapvető meghatározást és áttekintést, a varchar(n), UTF-8 támogatás, Kolláció, teljesítmény megfontolások stb.

Az adatok döntő szerepet játszanak bármely szervezetben, és egy attribútumot, amellyel meg van határozva, annak adattípusának nevezzük. Egyszerű szavakkal, az adattípus meghatározza, hogy milyen adatokat tárolhat bármely objektum, változó vagy kifejezés., SQL-fejlesztőként egy SQL-tábla létrehozása közben meg kell értenünk és el kell döntenünk, hogy milyen típusú adatokat tartalmaz majd a táblázat minden egyes oszlopa. Mint minden más programozási nyelv, az SQL is támogatja az adattípusok skáláját, amelyek egész adatokat, dátum-és időadatokat, karakteradatokat stb. lehetővé teszi a saját adattípusok meghatározását is. Az SQL varchar az egyik legismertebb és leggyakrabban használt adattípus a tételek között. Ebben a cikkben az SQL Server varchar különböző aspektusain megyünk keresztül az SQL Serverben.

Az alábbiakban bemutatjuk azt a vázlatot, amelyet ebben a blokkban lefedünk.,

  1. Bevezetés Az SQL Server varchar adattípus SQL Server
  2. használata varchar nagy blokkok szöveg
  3. mi az új SQL Server 2019 előnézet varchar adattípus?,
  4. Befolyása leválogatással a varchar SQL az SQL Server
  5. UTF-8 támogatás varchar az SQL Server 2019 CTP
  6. SQL Server varchar az adatok konverziók adatok megjelenítése
  7. Tároló, valamint a teljesítmény megfontolások segítségével SQL Server varchar
  8. Hatással string hossza SQL varchar a LEADOTT, illetve ÁTALAKÍTANI funkciók

Menjünk előre, hogy a fent említett akcióban.

Tehát mi a varchar az SQL-ben?

ahogy a neve is sugallja, a varchar változó karakteradatokat jelent., Más néven változó karakter, ez egy határozatlan hosszúságú karakterlánc adattípus. Képes tartani a számokat, betűket és speciális karaktereket. A Microsoft SQL Server 2008 (vagy újabb) legfeljebb 8000 karaktert tárolhat a karakterlánc maximális hosszaként a varchar adattípus segítségével. Az SQL varchar karakterenként általában 1 bájtot, a hosszinformációkhoz pedig további 2 bájtot tartalmaz. Javasoljuk, hogy a varchar-t használjuk adattípusként, ha az oszlopok hossza változó, a tényleges adatok pedig jóval kisebbek, mint az adott kapacitás. Váltsunk SSMS-re, és nézzük meg, hogyan működik a varchar.,

a következő példa három változót hoz létre (név, nem és életkor), a varchar pedig az adattípus és a hozzájuk rendelt különböző értékek. Amint az az alábbiakban látható eredményhalmazokból kitűnik, alapértelmezés szerint az SQL varchar oszlopok karakterlánchossza 1, és csak a változók első értékét adja vissza(a karakterlánc többi része csonka), ha a varchar adattípushoz nem kerül sor karakterlánchosszra. A len () függvény a varchar oszlopban tárolt karakterek számának meghatározására szolgál.

hogyan SQL varchar(max) különbözik varchar(n)?,

vannak esetek, amikor az SQL fejlesztők (beleértve magam is) általában meghatározzák varchar adattípus hossza nélkül, majd ezt követően nem sikerült beszúrni string rekordokat az SQL tábla, ez azért van, mert az SQL Server osztja 1 karaktertér, mint az alapértelmezett érték a varchar oszlop, amely meghatározott hossz nélkül. Gyakorlati esetekben a varchar (n) a változó hosszúságú értéket karakterláncként tárolja, itt az ” n ” a karakterlánc hosszát bájtban jelöli, és akár 8000 karakterig is elmehet., Most folytassuk tovább, és nézzük meg, hogyan tárolhatjuk az SQL varchar adatokat karakterlánchosszúsággal az SQL táblázat oszlopába. Az alábbiakban script létrehozza a táblázat Demovarchar néhány adatot benne. Az eredmény képernyő 7 alkalmazott nyilvántartását mutatja osztályaik, életkoruk stb.alapján.

tegyük fel, hogy van egy új kiegészítés egy alkalmazott a szervezetben, és mi, mint SQL data developers, kellene beilleszteni ezt az új rekordot a fenti táblázatban INSERT SQL utasítás. Az alábbiakban egy ilyen példa látható.,

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., Ez azért történt, mert, oszlop vezetéknév varchar (10) tarthat akár 10 karakter, és itt próbálunk beilleszteni egy új rekordot string hossza (“Newton Hamilton”), amely egyértelműen nagyobb, mint 10 karakter. Gyors javításként módosíthatjuk a táblázatot, növelhetjük az SQL varchar oszlop adattípusát, mondjuk varcharnak(50) Az új sor beillesztéséhez. Hajtsa végre az alábbi szkriptet egy új rekord módosításához és beillesztéséhez a táblázatba., Ezenkívül a len() és a DATALENGTH() függvényekkel meghatározhatja a varchar oszlopban tárolt karakterek számát, illetve a tároló méretét bájtban.

megfigyeltük, hogyan állíthatjuk be vagy változtathatjuk meg a karakterlánc hosszát az SQL varchar oszlopban az üzleti igények kielégítése érdekében. Vegyünk azonban egy olyan forgatókönyvet, amelyben nem vagyunk biztosak az SQL tábláinkba betöltendő adatméretben, ilyen körülmények között az adattípus méretének ellenőrzése és módosítása minden egyes oszlop esetében nem életképes választás., Az egyik lehetőség ennek kezelésére az lehet, hogy beállítja a karakterlánc hosszát az SQL Server varchar oszlop magasabb sávján (feltéve, hogy durva becsléssel rendelkezik arról, hogy a karakterlánc oszlop milyen hosszú lenne).

egy fontos pont, hogy tartsa figyelembe, tudjuk használni string hossza akár varchar(8000) csak mivel ez a maximális karakterek száma, hogy az SQL varchar(n) adattípus tudja tartani. Tehát azokban az esetekben, amikor esély van arra, hogy a varchar oszlop karakterlánchossza meghaladhatja a 8000 bájtot, a varchar(8001) vagy bármi magasabb használatával hiba lép fel., 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)., Ez egy nem Unicode nagy változó hosszúságú karakter adattípus, amely legfeljebb 2^31-1 bájtot (2 GB) tárolhat nem Unicode karakterekből.

Amikor először bemutatták a fogalmak varchar(n), valamint az SQL varchar, a közös kérdés, mint bármely más kezdő volt, az volt, hogy miért nem lehet egyszerűen kijelentem, egy oszlop adatok típus varchar(8500), vagy magasabb, mivel varchar(max), amely gondoskodik a tároló akár 2 gb-os, illetve miért kellene vagy használja varchar(<=8000), vagy varchar(max)?, Kaptam a választ egy kis kutatást, hogy az SQL Server használ oldal adatok tárolására, a méret az egyes oldalak 8KB (kivéve oldal fejléc, sor eltolások mérete). Ha a tárolandó adat kevesebb vagy egyenlő 8000 bájttal, a varchar(n) vagy a varchar(max) sorban tárolja. Ha azonban az adatok meghaladják a 8000 bájtos méretet, akkor azt Nagy objektumként(LOB) kezelik, és nem egymás után, hanem külön LOB oldalakon(LOB_DATA) tárolják., A Row ebben az esetben csak a LOB adatoldalra mutat, ahol a tényleges adatok vannak jelen, az SQL Server pedig automatikusan hozzárendel egy over-flow mutatót az oldalhoz az adatsorok manipulálásához. Dióhéjban, ha tudja, hogy az adatok meghaladhatják a 8000 bájtot, akkor jobb lehetőség a varchar(max) adattípusként történő használata.

hivatkozhatunk a DMV sys. dm_db_index_physical_stats-re, hogy megnézzük, milyen oldalelosztást (IN_ROW_DATA data/LOB_DATA/ ROW_OVERFLOW_DATA) hajtanak végre., Ezt a linket akkor is megnézheti, ha részletes magyarázatot szeretne kapni arról, hogy az SQL Server hogyan gyakorolja a sor-és oldalkorlátokat mind a varchar(n), mind a varchar(max) adattípusokkal.

ugorjunk át gyorsan az SSMS-re, és nézzük meg, hogyan tudjuk használni a varchar-T(max). Hajtsa végre a következő szkriptet 1 rekord beillesztéséhez, ahol a StringCol oszlop értéke minden sorban 15 000 B karakter (azaz 15 000 bájt).

a varchar(max) használatának egyik korlátozása az, hogy nem hozhatunk létre olyan indexet, amelynek varchar(max) kulcsoszlopa van, ehelyett tanácsos egy teljes szövegű indexet készíteni az adott oszlopban.,

egy gyors megjegyzés – innen a cikk utolsó szakaszáig megemlítjük varchart varchar helyett (n). Ne tekintsd varcharnak, alapértelmezett érték = 1.

az SQL Server varchar(n) és varchar(max) közötti érdekesebb különbségek megismeréséhez fontolja meg ezt a cikket, összehasonlítva a VARCHAR(max) vs VARCHAR(n) adattípusokat az SQL Serverben.

UTF-8 támogatás SQL Server 2019 CTP

mielőtt ásni, amit SQL Server 2019 preview funkció kínál az SQL varchar, nézzük gyorsan még egy érdekes adattípus- “nvarchar” először., Az SQL Server varcharhoz hasonlóan van SQL nvarchar, az n előtag Nvarcharban Unicode-ot jelöl, azaz mind Unicode, mind nem Unicode adatokat tárol. A varchar és az nvarchar közötti fő különbség a tárolásuk módja, a varchar normál 8 bites adatként(karakterenként 1 bájt), az nvarchar pedig karakterenként 2 bájtonként tárolja az adatokat. Emiatt az nvarchar akár 4000 karaktert is képes tárolni, és az SQL varchar-ként kétszer annyi helyet foglal el. Akkor megy keresztül ezt a linket, hogy többet tudjon nvarchar az SQL Server.,

az SQL Server 2019 nyilvános előnézetével a Microsoft bejelentette az UTF-8 karakterkódolás támogatását a meglévő adattípusokhoz (varchar and char). Azok számára, akik nem ismerik az UTF-8-at, a Unicode Transformation Formátumot jelenti, amely egy Unicode alapú kódolás, amely számos nyelvet támogat. A 8 az UTF-8-ban azt jelenti, hogy 1 bájtot (8 bitet) használ egy karakter ábrázolására a memóriában. Hasonlóképpen, UTF-16 használ 16 bit (2 bájt), hogy képviselje a karaktert. Az új SQL Server 2019 CTP bővítésének hatókörét csak ebben a cikkben korlátozzuk az “SQL varchar” – ra.,

Ez a javítás a következő hatással van az SQL Server: is

  1. javítja az adatok kompatibilitását

    amíg az SQL Server 2019 CTP, SQL varchar adattípus volt képes tárolni csak nem Unicode adatokat, és ezzel előnézet, most létrehozhat egy varchar oszlop tárolására Unicode adatok alatt UTF-8 engedélyezett collations (_UTF8). Az UTF-8 engedélyezett a varchar adattípusokban, és engedélyezve van, ha egy objektum egyezést hoz létre vagy módosít az UTF8 utótaggal. Ez segít a karakterkonverziós problémák minimalizálásában.,

  2. a tárolás és a teljesítmény javításának csökkentése

    UTF-8 a varchar adattípus támogatása jelentős tárolási megtakarítást biztosít a használatban lévő karakterkészlettől függően. Például, egy UTF – 8-kompatibilis összevonás, változó oszlop adattípus Nvarchar (20) varchar(20) kínál jelentős csökkenés tárolási követelmények mivel nvarchar(20) igényel 40 bájt tárolási varchar(20) szüksége van 20 bájt ugyanazon Unicode string.

fontos megjegyzés-Mivel ez a javítás még előnézetben van, a közeljövőben további előrehaladásra számíthatunk ezen a fronton., A meglévő Unicode (UTF-16) adattípusok (nchar, nvarchar és ntext) azonban változatlanok maradnak az SQL Server 2019 előnézetben.

Collation with SQL varchar in SQL Server 2019 CTP

Collation in SQL Server definiálja a konfigurációkat, hogy meghatározza a különböző szabályokat, mint például az eset érzékenysége, akcentus érzékenység, válogatás, karaktertípusok és szélesség stb. Ezeknek a tulajdonságoknak a megértése, valamint az adatokkal való együttműködés nagyon fontos. Az összesítés szerver, adatbázis, kifejezés vagy oszlop szintjén állítható be., Az UTF-8 az SQL Server 2019 CTP-ben támogatja az adatbázis-szintű vagy oszlopszintű összejátszást, és engedélyezve van, ha adatbázist vagy oszlopösszehasonlítást hoz létre vagy módosít UTF8 utótaggal.

ha végrehajtja az alábbi lekérdezést az SQL Server 2019 CTP ellen, akkor láthatja az összes UTF-8 támogatott egyeztetést az SQL Server példányán a funkció használatával (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., Ily módon az adott oszlop adataira specifikus kolláció kerül alkalmazásra anélkül, hogy befolyásolná az adatbázis többi részét.

mivel az SQL Server varchar adattípusával foglalkozunk ebben a bejegyzésben, nézzük meg, hogyan működik az SQL varchar adattípussal való oszlop-összhang. Hajtsa végre az alábbi kódot, hogy megváltoztassa az SQL Server varchar Oszlopegyezést egy kollációs típusról _UTF8 utótagra. Az adatbázis-Összevonásról bővebben itt olvashat.,TE TÁBLÁZAT demovarcharcollate

(ID int PRIMARY KEY
Leírás varchar(50) LEVÁLOGATÁS LATIN1_GENERAL_100_CI_AS_SC NEM NULL
);
ALTER TABLE demovarcharcollate
ALTER OSZLOP Leírás varchar(50) LEVÁLOGATÁS LATIN1_GENERAL_100_CI_AS_SC_UTF8 NEM ÜRES;

Szerepe az SQL varchar data konverziók adatok megjelenítése

SQL Server varchar széles körben használt adatok megjelenítése a kívánatos formátumok használata Konvertálni Leadott függvények az SQL Server., A valós adatok az adattípusok keverékével foglalkoznak, és kompatibilisnek kell lenniük egymással (azaz ugyanahhoz az adattípushoz tartoznak), mielőtt összehasonlítanánk őket. Az SQL Server támogatja mind az implicit, mind az explicit konverziókat.

  • Megjegyzés: nézze meg az SQL CAST és SQL CONVERT funkció áttekintését, hogy további információt kapjon arról, hogyan tudjuk ezeket a konverziókat végrehajtani az adatok kompatibilitása érdekében.

az SQL varchar a szükséges kimenetben folyamatosan formázza és jeleníti meg az adatokat., Magam SQL fejlesztőként rendkívül egyszerűnek találom a convert / cast használatát varchar adattípussal az adatok hozzárendelésének vagy átalakításának elvégzéséhez, különösen a dátummezők esetében.

én használ táblázat FactInternetSales Minta DB AdventureWorksDW2017 megmutatni, hogy ez a funkció működik. Bármely táblázatra hivatkozhat, ahol néhány datetime, valamint pénz / úszó mező található a gyakorlati célra. A következő parancsfájl két datetime oszlopot alakít át SQL varchar típusra 102-es és 107-es stílussal, hogy az adatokat yyyy.mm.dd, illetve Mon dd, yyyy formátumban jelenítse meg., Továbbá, a SalesAmount oszlop pénzt, mint egy adattípus alakítjuk varchar style 3 alkalmazzák, hogy megjelenítse az összeget vesszővel, amint az az alábbi képernyőképen. Továbbá, mondjuk, csak a 2010-es évben leadott megrendelések adatait szeretnénk látni, a CAST funkció használatával a datetime oszlop varchar adatokká konvertálásához a karakterlánc-összehasonlítás a WHERE záradékban történik. Azt is megy át SQL convert dátuma további információt talál dátum konverziós formátumok és stílusok.,

hatása string hossza SQL varchar a leadott és konvertálni funkciók

SQL Server tárolja a hosszú string adatokat a általánosan használt varchar adattípus és hasznos lesz tudni, hogy a várható és maximális hosszúságú húrok megjelenítéséhez az eredményeket a UI. Másolja le és hajtsa végre az alábbi kódot, ahol egy hosszú karakterláncot továbbítunk egy meghatározatlan hosszúságú varchar változóban (@demovarchar), valamint egy másik változóban egy meghatározott varchar hosszúsággal (@demovarcharwithcast)., A Microsoft az SQL Serverben az SQL Varchar alapértelmezett hosszaként (meghatározatlan varchar hosszúsággal) 30-at vesz fel, amikor a CAST and CONVERT funkciókat használja. Esetünkben, annak ellenére, hogy a húr hossza 52 volt, 30-at adott vissza az utolsó eredménykimenet hosszaként.

fontos megjegyezni, hogy amikor egy meghatározatlan hosszúságú varchar mező jön létre, az ilyen mező alapértelmezett hossza 1 (az alábbi piros színben látható)., Amikor varchar hossza nem specifikált használják a LEADOTT vagy ÁTALAKÍTANI funkciók, a szereplők, vagy ÁTALAKÍTANI visszatér n=30 az alapértelmezett string hossza, ez az átalakítás (kék színnel szín alatt).,le’), mint”LenOFStringPassed”

válassza DATALENGTH(@demovarchar) mint”DefaultVarcharLength”
válassza DATALENGtH(CAST(@demovarcharwithcast mint varchar(60)))) mint “VarcharLengthSpecifiedWithCast”
válassza DATALENGTH(CAST(@demovarcharwithcast as Varchar))) mint “defaultvarsharlengthcast”

tárolási és teljesítmény szempontok SQL Varchar

p > adattípusok, mint Varchar, Char és Nvarchar mind tárolására használt string adatok SQL Server., Az SQL varchar változó karakterlánchosszt tárol, míg az SQL char rögzített karakterlánchosszt tárol. Ez azt jelenti, hogy az SQL Server varchar csak azokat a karaktereket tárolja, amelyekhez hozzárendeljük, a char pedig a maximális oszlopterületet tartja, függetlenül attól, hogy melyik karakterláncot tartja. Mert a fix mező hossza, adatok húzta egyenesen az oszlop anélkül, hogy bármilyen adat manipuláció, illetve index kereséseket ellen varchar vagy lassabb, mint a char mezőket. A CHAR jobb, mint a VARCHAR performance wise, azonban felesleges memóriaterületet igényel, ha az adatoknak nincs rögzített hossza., Tehát azokban az esetekben, amikor a lemez mérete nem jelent problémát, ajánlott a CHAR használata.

egyszerű szavakkal mondjuk, hogy van egy oszlopunk varchar(150) = ‘SQLShack’ – ez 8 bájtot(sqlshack) + 2 bájtot vesz igénybe a hosszinformációhoz = 10 bájt a tényleges és a char oszlophoz(150) = ‘SQLShack’ – ez teljes 150 bájtot fogyaszt a lemezen, függetlenül attól, hogy mit adunk át karakterláncként. Az alábbi példa azt mutatja, hogy a CHAR hogyan használja a maximális kiosztott helyet (150) az átadott karakterlánchoz való illeszkedéshez, valamint hogyan használja a varchar oszlop csak a szükséges helyet.,

A lényeg az, hogy a mi igényeinknek megfelelő adattípust használjuk. Használja az SQL varchar, amikor a mérete, az oszlop jelentősen eltérőek, használja varchar(max), ha van rá esély, hogy a húr hossza meghaladja a 8000 bájt, használja a karakter, ha a mérete, az oszlop rögzítve vannak használja nvarchar, ha van egy követelmény, hogy tárolja a Unicode-vagy többnyelvű adatok.

következtetés

az adattípusok alapvető szerepet játszanak az adatbázis kialakításában, de gyakran figyelmen kívül hagyják őket., Az adattípusok jó megértése és pontos használata biztosítja az adatok helyes jellegét és hosszát a táblázatokban. Ennek a tippnek az a célja, hogy segítsen megérteni az SQL Server varchar alapvető jellemzőit és jellemzőit, valamint annak teljesítményét és tárolási szempontjait az SQL Serverben. Az SQL varchar legújabb fejlesztéseit is lefedtük az SQL Server 2019 előnézetben.

Lásd még:

megnézheti ezeket a többi cikket, hogy folytassa a tanulást az SQL adattípusokon.,

  • Megértése a GUID típusú adatokat az SQL Server
  • Térbeli adatok típusú SQL Server
  • Szerző
  • Utolsó Hozzászólás
Gauri egy SQL Server Szakmai 6+ éves tapasztalattal dolgozik a globális multinacionális tanácsadás, technológia szervezetek. Ő nagyon szenvedélyes dolgozik SQL Server témák, mint az Azure SQL Database, SQL Server Reporting Services, R, Python, Power BI, adatbázis motor, stb .. , Több éves tapasztalattal rendelkezik a műszaki dokumentációban, és szereti a technológia írását.
mély tapasztalattal rendelkezik az adat-és elemzési megoldások tervezésében, valamint stabilitásának, megbízhatóságának és teljesítményének biztosításában. SQL Server tanúsítvánnyal is rendelkezik, és olyan tanúsítványokat adott át, mint a 70-463: adattárházak megvalósítása a Microsoft SQL Server segítségével.,
összes Megtekintése hozzászólások Gauri Mahajan

Legújabb hozzászólások Gauri Mahajan (minden)
  • Fedezze fel Azure-Elemzési Szolgáltatások Modell Adatok – február 4-én, 2021
  • első lépések az Azure Analysis Services – január 13. 2021
  • Csatlakozás Azure Databricks adatok Teljesítmény BI Asztali – június 1, 2020

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük