SQLShack (Română)

posted in: Articles | 0

În acest articol vom examina SQL varchar tip de date, inclusiv o definiție de bază și de ansamblu, diferențele de varchar(n), UTF-8 suport, Colaționare, considerente de performanță și mai mult.

datele joacă un rol crucial în orice organizație și un atribut prin care este definit se numește tipul de date. În cuvinte simple, tipul de date afirmă ce fel de date poate stoca orice obiect, variabilă sau expresie., Ca dezvoltator SQL, în timp ce creăm un tabel SQL, trebuie să înțelegem și să decidem ce tip de date vor fi conținute de fiecare coloană dintr-un tabel. Ca orice alt limbaj de programare, SQL acceptă, de asemenea, o gamă de tipuri de date care pot conține date întregi, date despre dată și oră, date despre caractere etc. și vă permite să definiți tipuri de date proprii, de asemenea. SQL varchar este unul dintre cele mai cunoscute și mai utilizate tipuri de date din lot. În acest articol, vom parcurge diferite fațete ale serverului SQL varchar în serverul SQL.

mai jos este conturul pe care îl vom acoperi în acest bloc.,

  1. Introducere în SQL Server varchar tip de date în SQL Server
  2. utilizarea varchar pentru blocuri mari de text
  3. ce este nou în SQL Server 2019 previzualizare pentru varchar datatype?,
  4. Influența colaționare pe varchar SQL în SQL Server
  5. UTF-8 suport cu varchar în SQL Server 2019 CTP
  6. SQL Server varchar pentru conversii de date și de afișare a datelor
  7. Stocare și considerente de performanță folosind SQL Server varchar
  8. Impactul asupra string lungime de SQL varchar cu DISTRIBUTIE si CONVERTI funcții

Să mergem mai departe și să vedem menționate mai sus în acțiune.

deci, ce este varchar în SQL?

după cum sugerează și numele, varchar înseamnă date de caractere care variază., De asemenea, cunoscut sub numele de caracter variabil, este un tip de date șir de lungime nedeterminată. Poate conține numere, litere și caractere speciale. Microsoft SQL Server 2008 (și mai sus) poate stoca până la 8000 de caractere ca lungimea maximă a șirului folosind tipul de date varchar. SQL varchar deține, de obicei, 1 octet pe caracter și 2 mai mulți octeți pentru informațiile de lungime. Se recomandă utilizarea varchar ca tip de date atunci când coloanele au o lungime variabilă, iar datele reale sunt mult mai mici decât capacitatea dată. Să trecem la SSMS și să vedem cum funcționează varchar.,

următorul exemplu creează trei variabile (nume, sex și vârstă) cu varchar ca tip de date și valori diferite care le sunt atribuite. După cum reiese din seturile de rezultate prezentate mai jos, în mod implicit, lungimea șirului coloanelor SQL varchar este 1 și returnează doar prima valoare a variabilelor(restul șirului fiind trunchiat) atunci când nu este trecută lungimea șirului pentru tipul de date varchar. Funcția len () este utilizată pentru a determina numărul de caractere stocate în coloana varchar.

cum SQL varchar(max) este diferit de varchar(n)?,

Există momente în care dezvoltatorii SQL (inclusiv eu) de obicei se definească tipul de date varchar fără o masă, și, ulterior, a reușit pentru a introduce șir de înregistrări în tabel SQL, aceasta este pentru că SQL Server alocă 1 caracter spațiu ca valoare implicită pentru varchar coloană care este definit fără orice lungime. În scenarii practice, varchar (n) este utilizat pentru a stoca valoarea lungimii variabile ca șir, aici ” n ” denotă lungimea șirului în octeți și poate ajunge până la 8000 de caractere., Acum, să mergem mai departe și să vedem cum putem stoca date SQL varchar cu o lungime de șir în coloana unui tabel SQL. Mai jos script creează Demovarchar tabel cu unele date în ea. Iar ecranul rezultat arată înregistrările A 7 angajați în funcție de departamentele lor, vârstă etc.

Să presupunem că există o nouă adăugare a unui angajat în organizație și noi, ca dezvoltatori de date SQL, ar trebui să introducem această nouă înregistrare în tabelul de mai sus folosind instrucțiunea insert SQL. Mai jos este prezentat un astfel de exemplu.,

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., Acest lucru a avut loc deoarece, coloana Prenume varchar(10) poate stoca până la 10 de caractere și aici suntem încercarea de a introduce un nou record cu string lungime(‘Newton Hamilton), care este în mod clar mai mult de 10 caractere. Ca o soluție rapidă, putem modifica tabelul și crește tipul de date al coloanei SQL varchar, spune varchar(50) pentru a insera noul rând. Executați scriptul de mai jos pentru a modifica și a insera o nouă înregistrare în tabel., În plus, puteți utiliza funcțiile LEN() și DATALENGTH() pentru a determina numărul de caractere și, respectiv, dimensiunea stocării în octeți care sunt stocate în coloana varchar.

am observat mai sus cum putem seta sau modifica lungimea șirului în coloana SQL varchar pentru a satisface nevoile de afaceri. Cu toate acestea, luați în considerare un scenariu în care nu suntem siguri de dimensiunea datelor care va fi încărcată în tabelele noastre SQL, în astfel de circumstanțe, inspectarea și Modificarea dimensiunii tipului de date pentru fiecare coloană nu este o alegere viabilă., Una dintre opțiunile de a gestiona acest lucru ar putea fi este să setați lungimea șirului pe bara superioară din coloana SQL Server varchar (cu condiția să aveți o estimare aproximativă a lungimii coloanei șirului).

un punct important de ținut cont, putem folosi lungimea șirului până la varchar(8000) doar deoarece acesta este numărul maxim de caractere pe care tipul de date SQL varchar(n) îl poate păstra. Deci, în cazurile în care există șanse ca lungimea șirului coloanei varchar să depășească 8000 de octeți, utilizarea varchar(8001) sau ceva mai mare va duce la o eroare., 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)., Este un tip de date de caractere non-Unicode cu lungime variabilă și poate stoca maximum 2^31-1 octeți (2 GB) de caractere non-Unicode.

când am fost introdus pentru prima dată la conceptele varchar(n) și SQL varchar, întrebarea obișnuită ca orice alt începător pe care l-am avut, a fost de ce nu putem declara pur și simplu o coloană de tip de date varchar(8500) sau mai mare, deoarece avem varchar(max) care are grijă de stocarea de până la 2 GB și)?, Am răspunsurile mele pe un pic de cercetare care SQL Server utilizează pagina pentru a stoca date și dimensiunea fiecărei pagini este 8KB(cu excepția antet de pagină, dimensiunea compensează rând). Dacă datele care trebuie stocate sunt mai mici sau egale cu 8000 de octeți, varchar(n) sau varchar(max) îl stochează în rând. Cu toate acestea, dacă datele depășesc dimensiunea octetului 8000, atunci acestea sunt tratate ca un obiect mare(LOB) și nu sunt stocate în rând, ci în pagini LOB separate(LOB_DATA)., Rând într-un astfel de caz va avea doar un pointer la pagina de date LOB în cazul în care datele reale sunt prezente și SQL Server atribuie automat un indicator de over-flow la pagina pentru a manipula rânduri de date. Pe scurt, dacă știți că datele ar putea depăși 8000 octet, este o opțiune mai bună de a utiliza varchar(max) ca tip de date.

Ne putem referi la DMV sys.dm_db_index_physical_stats pentru a vedea ce fel de pagina de alocare (IN_ROW_DATA date/LOB_DATA/ ROW_OVERFLOW_DATA) este realizată., De asemenea, puteți verifica acest link în cazul în care doriți explicații detaliate despre modul în care SQL Server exercită limitele rândului și paginii atât cu tipurile de date varchar(n), cât și cu varchar(max).să trecem rapid la SSMS și să vedem cum putem folosi varchar(max). Executați următorul script pentru a insera 1 înregistrare în care valoarea coloanei StringCol în fiecare rând este de 15.000 de caractere B (adică 15.000 de octeți).

o limitare a utilizării varchar(max) este că nu putem crea un index care are un varchar(max) ca coloană cheie, în schimb, este recomandabil să faceți un index cu text complet pe acea coloană.,o notă rapidă de făcut – de aici până la ultima etapă a acestui articol, vom menționa varchar în locul varchar(n). Nu-l considera ca varchar cu valoarea implicită = 1. pentru a afla unele diferențe mai interesante între varchar (N) și varchar(max) în SQL Server, ia în considerare merge prin acest articol, comparând VARCHAR(max) vs VARCHAR(n) tipuri de date în SQL Server.

suport UTF-8 cu SQL Server 2019 CTP

înainte de a săpa în ceea ce SQL Server 2019 caracteristică previzualizare are de oferit pentru SQL varchar, să ne uităm rapid la un tip de date mai interesant – „nvarchar” mai întâi., La fel ca SQL Server varchar , avem SQL nvarchar , prefixul n din Nvarchar denotă Unicode, adică stochează atât date Unicode, cât și date non-Unicode. Diferența cheie dintre varchar și nvarchar este modul în care sunt stocate, varchar este stocat ca date obișnuite pe 8 biți(1 octet pe caracter) și nvarchar stochează date la 2 octeți pe caracter. Din acest motiv, nvarchar poate stoca pana la 4000 de caractere și este nevoie de dublu spațiu ca SQL varchar. Puteți parcurge acest link pentru a afla mai multe despre nvarchar în SQL Server., cu previzualizarea publică a SQL Server 2019, Microsoft a anunțat suportul pentru codificarea caracterelor UTF-8 la tipurile de date existente (varchar și char). Pentru cei care nu sunt conștienți de UTF-8, reprezintă formatul de transformare Unicode și este o codificare bazată pe Unicode care acceptă multe limbi. 8 în UTF-8 înseamnă că utilizează 1 octet (8 biți) pentru a reprezenta un caracter în memorie. De asemenea, UTF-16 folosește 16 biți (2 octeți) pentru a reprezenta un caracter. Vom limita domeniul de aplicare al acestui nou SQL Server 2019 CTP accesoriu la „SQL varchar” numai în acest articol.,

Acest accesoriu are următorul impact în SQL Server: este

  1. Îmbunătățește compatibilitatea Datelor

    Până SQL Server 2019 CTP, SQL varchar tip de date are capacitatea de a stoca doar Non-Unicode date și cu acest preview, putem crea acum un varchar coloană pentru a stoca date Unicode în UTF-8 activat colaționări (_UTF8). UTF – 8 este permis în tipurile de date varchar și este activat atunci când se creează sau se schimbă colaționarea unui obiect într-o colaționare cu sufixul UTF8. Acest lucru ajută la minimizarea problemelor de conversie de caractere.,

  2. reducerea stocării și îmbunătățirea performanței

    suportul UTF-8 pentru tipul de date varchar oferă economii substanțiale de stocare în funcție de setul de caractere utilizat. De exemplu, folosind o colaționare activată UTF-8, schimbarea tipului de date de coloană de la nvarchar(20) la varchar(20) oferă o scădere semnificativă a cerințelor de stocare, deoarece nvarchar(20) necesită 40 de octeți pentru stocare, iar varchar(20) are nevoie de 20 de octeți pentru același șir Unicode.notă laterală importantă-deoarece această îmbunătățire este încă în previzualizare, ne putem aștepta la mai multe progresii pe acest front în viitorul apropiat., Cu toate acestea, tipurile de date Unicode (UTF-16) existente (nchar, nvarchar și ntext) rămân neschimbate în previzualizarea SQL Server 2019.

    Collation cu SQL varchar în SQL Server 2019 CTP

    Collation în SQL Server definește configurații pentru a determina diverse reguli, cum ar fi sensibilitatea cazurilor, sensibilitatea accentului, sortarea, tipurile de caractere și lățimea etc. Înțelegerea tuturor acestor proprietăți și modul în care funcționează cu datele dvs. devin foarte importante. Colaționarea poate fi setată la nivel de server, bază de date, expresie sau coloană., UTF-8 acceptă colaționarea la nivel de bază de date sau la nivel de coloană în SQL Server 2019 CTP și este activată atunci când creați sau modificați colaționarea bazei de date sau a coloanei într-o colaționare cu sufixul UTF8.

    Dacă executați interogarea de mai jos împotriva SQL Server 2019 CTP, veți putea vedea toate colaționările suportate de UTF-8 pe instanța dvs. de SQL Server folosind funcția (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., În acest fel, colaționarea specifică este aplicată datelor coloanei respective fără a afecta restul bazei de date.

    deoarece avem de-a face cu tipul de date SQL Server varchar în acest post, să vedem cum funcționează colaționarea coloanelor cu tipul de date SQL varchar. Executați codul de mai jos pentru a modifica colaționarea coloanei SQL Server varchar de la un tip de colaționare la sufixul _UTF8. Puteți citi mai multe despre colaționarea bazei de date de aici.,MASĂ demovarcharcollate

    (ID int CHEIE PRIMARĂ,
    Descriere varchar(50) ADUNĂ LATIN1_GENERAL_100_CI_AS_SC not NULL
    );
    ALTER TABLE demovarcharcollate
    ALTER COLUMN Descriere varchar(50) ADUNĂ LATIN1_GENERAL_100_CI_AS_SC_UTF8 NU NULL;

    Rol de SQL varchar în conversii de date și de afișare a datelor

    SQL Server varchar este utilizat pe scară largă în afișarea datelor în baza de dorit ce utilizează Converti și a Aruncat funcții în SQL Server., Datele reale se ocupă de o combinație de tipuri de date și trebuie să fie compatibile între ele (adică să aparțină aceluiași tip de date), înainte de a face comparații cu acestea. SQL Server acceptă atât conversii implicite, cât și explicite.

    • notă: consultați prezentarea generală a funcțiilor SQL CAST și SQL CONVERT pentru a obține mai multe informații despre modul în care putem efectua aceste conversii pentru compatibilitatea datelor.cu o nevoie neîncetată de formatare și afișare a datelor în ieșirea necesară, SQL varchar vine cu adevărat la îndemână., În calitate de dezvoltator SQL, mi se pare extrem de simplu să folosesc conversia/distribuția cu tipul de date varchar pentru a efectua misiuni sau transformări asupra datelor, în special pentru câmpurile de date.

      sunt folosind tabelul FactInternetSales din proba DB AdventureWorksDW2017 pentru a arăta cum funcționează această caracteristică. Vă puteți referi la orice tabel cu unele datetime și bani/câmpuri float în scopul practicii. Următorul script convertește două coloane datetime la tipuri SQL varchar cu stil 102 și 107 pentru a afișa datele în format AAAA.mm.dd și Mon dd, respectiv AAAA., De asemenea, coloana SalesAmount cu bani ca tip de date este convertită în varchar, iar stilul 3 este aplicat pentru a afișa suma cu virgule, așa cum se arată în imaginea de mai jos. În plus, să zicem, am dori să vedem date pentru comenzile plasate numai în anul 2010, folosind funcția CAST pentru a converti coloana datetime în datele varchar, comparația șirului este efectuată în clauza WHERE. De asemenea, puteți trece peste SQL convert date pentru a găsi mai multe informații despre formatele și stilurile de conversie a datei.,

      Impact pe lungime șir de SQL varchar cu DISTRIBUTIE si CONVERTI funcții

      SQL Server magazine șir lung de date în mod obișnuit folosit varchar tip de date și devine util să știți așteptat și lungimi maxime de siruri de caractere pentru a afișa rezultatele în UI. Copiați și executați codul de mai jos, unde trecem un șir lung într-o variabilă varchar de lungime nespecificată (@demovarchar) și, de asemenea, într-o altă variabilă cu o lungime varchar definită (@demovarcharwithcast)., Microsoft ia 30 ca lungime implicită pentru SQL Varchar (cu lungime varchar nespecificată) în SQL Server atunci când este utilizat cu funcții CAST și CONVERT. În cazul nostru, chiar dacă lungimea șirului a fost 52, acesta a returnat 30 ca lungime așa cum se arată în ultimul rezultat de ieșire.

      un punct important de reținut aici este că atunci când este creat un câmp varchar nespecificat lungime, lungimea implicită a unui astfel de câmp este 1 (prezentat în culoarea roșie de mai jos)., Când lungimea varchar este nespecificată și este utilizată cu funcții CAST sau CONVERT, CAST sau CONVERT returnează N=30 ca lungime implicită a șirului acestei conversii (marcată în culoarea albastră de mai jos).,le’) CA ‘LenOFStringPassed’

      SELECTAȚI DATALENGTH(@demovarchar) CA ‘DefaultVarcharLength’
      SELECTAȚI DATALENGtH(CAST(@demovarcharwithcast CA varchar(60))) CA ‘VarcharLengthSpecifiedWithCast’
      SELECTAȚI DATALENGTH(CAST(@demovarcharwithcast CA varchar)) CA ‘DefaultVarcharLengthWithCast’

      Stocare și considerente de performanță folosind SQL varchar

      tipuri de Date ca varchar, char și nvarchar sunt toate utilizate pentru a stoca date șir de caractere în SQL Server., SQL varchar stochează lungimea șir variabilă în timp ce SQL char stochează lungimea șir fix. Aceasta înseamnă că SQL Server varchar deține numai caracterele pe care le atribuim și char deține spațiul maxim al coloanei, indiferent de șirul pe care îl deține.

      Din cauza lungimilor câmpului fix, datele sunt trase direct din coloană fără a face nicio manipulare a datelor, iar căutările indexului împotriva varchar sunt mai lente decât cele ale câmpurilor char. CHAR este mai bună decât VARCHAR performanță înțelept, cu toate acestea, este nevoie de spațiu de memorie inutile atunci când datele nu au o lungime fixă., Deci, în cazurile în care dimensiunea discului nu este o problemă, se recomandă utilizarea CHAR.

      În cuvinte simple, spunem că avem o coloană cu varchar(150) = ‘SQLShack’ – Acest lucru va dura 8 bytes(sqlshack) + 2 bytes pentru lungimea de informații = 10 octeți în real și pentru coloana cu char(150) = ‘SQLShack’ – Acest lucru va consuma toată 150 de octeți de pe disc, indiferent de ceea ce ne trece ca un șir de caractere. Exemplul de mai jos arată cum CHAR folosește spațiul maxim alocat (150) pentru a se încadra în șirul trecut și cum coloana varchar folosește doar spațiul necesar.,

      linia de Jos este de a utiliza tipul de date care se potrivește nevoilor noastre. Puteți utiliza SQL varchar atunci când dimensiunile coloanei variază considerabil, utilizați varchar(max) atunci când există șanse ca lungimea șirului să depășească 8000 de octeți, utilizați char atunci când dimensiunile coloanei sunt fixe și utilizați nvarchar dacă există o cerință de a stoca date Unicode sau multilingve.

      concluzie

      tipurile de date joacă un rol fundamental în proiectarea bazei de date, dar sunt adesea trecute cu vederea., O bună înțelegere și utilizarea exactă a tipurilor de date asigură că natura și lungimea corectă a datelor sunt populate în tabele. Intenția acestui sfat este de a vă ajuta să obțineți o înțelegere a caracteristicilor și caracteristicilor de bază ale SQL Server varchar împreună cu aspectele sale de performanță și stocare în SQL Server. De asemenea, am acoperit progresele recente în SQL varchar în previzualizarea SQL Server 2019.

      A se vedea, de asemenea,

      puteți verifica aceste alte articole pentru a continua învățarea pe tipuri de date SQL.,

      • Înțelegerea GUID tip de date în SQL Server
      • Spațială tipuri de date în SQL Server
      • Autor
      • Mesajele Recente
      Gauri este un SQL Server Profesionale și a 6+ ani de experiență de lucru cu multinaționale globale de consultanță și organizații de tehnologie. Ea este foarte pasionat de lucru pe subiecte SQL Server, cum ar fi Azure SQL Database, SQL Server Reporting Services, R, Python, putere BI, motor de baze de date, etc., Are ani de experiență în documentația tehnică și este pasionată de tehnologia de creație.
      are o experiență profundă în proiectarea soluțiilor de date și analiză și asigurarea stabilității, fiabilității și performanței acestora. De asemenea, este certificată în SQL Server și a trecut certificări precum 70-463: implementarea depozitelor de date cu Microsoft SQL Server.,
      Vezi toate posturile de Gauri Mahajan

      Ultimele posturi de Gauri Mahajan (vezi toate)
      • de a Explora Azure Servicii de Analiză a Modelului și a Datelor – 4 februarie 2021
      • Obtinerea a început cu Azure Servicii de Analiză – ianuarie 13, 2021
      • se Conecteze Azure Databricks date Power BI Desktop – 1 iunie, în 2020,

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *