SQLShack (Italiano)

postato in: Articles | 0

In questo articolo esamineremo il tipo di dati SQL varchar tra cui una definizione di base e panoramica, differenze da varchar(n), supporto UTF-8, regole di confronto, considerazioni sulle prestazioni e altro ancora.

I dati svolgono un ruolo cruciale in qualsiasi organizzazione e un attributo con cui è definito è chiamato il suo tipo di dati. In parole semplici, il tipo di dati indica il tipo di dati che qualsiasi oggetto, variabile o espressione può memorizzare., Come sviluppatore SQL, durante la creazione di una tabella SQL, dobbiamo capire e decidere quale tipo di dati sarà contenuto da ogni colonna in una tabella. Come qualsiasi altro linguaggio di programmazione, SQL supporta anche una gamma di tipi di dati che possono contenere dati interi, dati di data e ora, dati di carattere ecc. e ti consente di definire anche i tuoi tipi di dati. SQL varchar è uno dei tipi di dati più noti e più utilizzati tra il lotto. In questo articolo, cammineremo attraverso diversi aspetti del server SQL varchar nel server SQL.

Di seguito è riportato il contorno che tratteremo in questo blocco.,

  1. Introduzione al tipo di dati di SQL Server varchar in SQL Server
  2. Uso di varchar per grandi blocchi di testo
  3. Cosa c’è di nuovo in SQL Server 2019 anteprima per varchar tipo di dati?,
  4. Influenza di confronto su varchar SQL in SQL Server
  5. supporto per UTF-8 con varchar in SQL Server 2019 CTP
  6. SQL Server varchar per le conversioni di dati e la visualizzazione dei dati
  7. Archiviazione e considerazioni sulle prestazioni di utilizzo di SQL Server varchar
  8. Impatto sulla lunghezza della stringa SQL di tipo varchar con il CAST e le funzioni di CONVERSIONE

Andiamo avanti e vediamo di tale azione.

Quindi qual è varchar in SQL?

Come suggerisce il nome, varchar significa dati di carattere che variano., Conosciuto anche come Carattere variabile, è un tipo di dati stringa di lunghezza indeterminata. Può contenere numeri, lettere e caratteri speciali. Microsoft SQL Server 2008 (e versioni successive) può memorizzare fino a 8000 caratteri come lunghezza massima della stringa utilizzando il tipo di dati varchar. SQL varchar di solito contiene 1 byte per carattere e altri 2 byte per le informazioni sulla lunghezza. Si consiglia di utilizzare varchar come tipo di dati quando le colonne hanno lunghezza variabile e i dati effettivi sono molto inferiori alla capacità data. Passiamo a SSMS e vediamo come funziona varchar.,

Il seguente esempio crea tre variabili (nome, sesso ed età) con varchar come tipo di dati e diversi valori assegnati a loro. Come evidente dai set di risultati mostrati di seguito, per impostazione predefinita, la lunghezza della stringa delle colonne SQL varchar è 1 e restituisce solo il primo valore delle variabili(il resto della stringa viene troncato) quando non viene passata alcuna lunghezza della stringa per il tipo di dati varchar. Funzione len () viene utilizzato per determinare il numero di caratteri memorizzati nella colonna varchar.

In che modo SQL varchar(max) è diverso da varchar(n)?,

Ci sono momenti in cui gli sviluppatori SQL (incluso me stesso) di solito definiscono il tipo di dati varchar senza una lunghezza e, successivamente, non riescono a inserire record di stringhe nella tabella SQL, questo perché SQL Server assegna 1 spazio di caratteri come valore predefinito alla colonna varchar definita senza alcuna lunghezza. In scenari pratici, varchar(n) viene utilizzato per memorizzare il valore di lunghezza variabile come una stringa, qui ‘n’ indica la lunghezza della stringa in byte e può arrivare fino a 8000 caratteri., Ora, procediamo ulteriormente e vediamo come possiamo memorizzare i dati SQL varchar con una lunghezza di stringa nella colonna di una tabella SQL. Sotto script crea la tabella Demovarchar con alcuni dati in esso. E la schermata dei risultati mostra i record di 7 dipendenti in base ai loro reparti, età, ecc.

Supponiamo che ci sia una nuova aggiunta di un dipendente nell’organizzazione e noi, come sviluppatori di dati SQL, dovremmo inserire questo nuovo record nella tabella sopra usando l’istruzione INSERT SQL. Di seguito è riportato uno di questi esempi.,

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., Ciò si è verificato perché, column LastName varchar (10) può contenere fino a 10 caratteri e qui stiamo tentando di inserire un nuovo record con lunghezza della stringa(‘Newton Hamilton’) che è chiaramente maggiore di 10 caratteri. Come soluzione rapida, possiamo modificare la tabella e aumentare il tipo di dati della colonna SQL varchar, ad esempio a varchar(50) per inserire la nuova riga. Eseguire lo script seguente per MODIFICARE e INSERIRE un nuovo record nella tabella., Inoltre, è possibile utilizzare le funzioni LEN () e DATALENGTH () per determinare rispettivamente il numero di caratteri e la dimensione di archiviazione in byte memorizzati nella colonna varchar.

Abbiamo osservato sopra come possiamo impostare o modificare la lunghezza della stringa nella colonna SQL varchar per soddisfare le esigenze aziendali. Tuttavia, considera uno scenario in cui non siamo sicuri della dimensione dei dati che verrà caricata nelle nostre tabelle SQL, in tali circostanze, ispezionare e modificare la dimensione del tipo di dati per ogni colonna non è una scelta praticabile., Una delle opzioni per gestire questo potrebbe essere quella di impostare la lunghezza della stringa sulla barra più alta nella colonna varchar di SQL Server (a condizione di avere una stima approssimativa di quale lunghezza della colonna stringa sarebbe approssimativamente).

Un punto importante da tenere in considerazione, possiamo usare la lunghezza della stringa fino a varchar(8000) solo perché questo è il numero massimo di caratteri che il tipo di dati SQL varchar(n) può contenere. Quindi, nei casi in cui ci sono possibilità che la lunghezza della stringa della colonna varchar possa superare 8000 byte, l’uso di varchar(8001) o qualcosa di più alto si tradurrà in un errore., 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)., È un tipo di dati di caratteri di lunghezza variabile non Unicode e può memorizzare un massimo di 2 ^ 31-1 byte (2 GB) di caratteri non Unicode.

Quando ho introdotto i concetti di tipo varchar(n) e di SQL di tipo varchar, la domanda comune come qualsiasi altro principiante ho avuto, era perché non possiamo semplicemente affermare una colonna di tipo di dati varchar(8500) o superiore, dal momento che abbiamo varchar(max) che si prende cura di storage fino a 2 GB e perché dovremmo utilizzare varchar(<=8000) o varchar(max)?, Ho ottenuto le mie risposte su una piccola ricerca che SQL Server utilizza la pagina per memorizzare i dati e la dimensione di ogni pagina è 8KB(esclusa l’intestazione della pagina, la dimensione degli offset della riga). Se i dati da memorizzare sono inferiori o uguali a 8000 byte, varchar (n) o varchar(max) li memorizza in riga. Tuttavia, se i dati superano la dimensione di 8000 byte, vengono trattati come un oggetto di grandi dimensioni(LOB) e non vengono memorizzati in riga ma in pagine LOB separate(LOB_DATA)., Row in tal caso avrà solo un puntatore alla pagina dei dati LOB in cui sono presenti i dati effettivi e SQL Server assegna automaticamente un indicatore di flusso eccessivo alla pagina per manipolare le righe di dati. In poche parole, se sai che i dati potrebbero superare 8000 byte, è un’opzione migliore usare varchar(max) come tipo di dati.

Possiamo fare riferimento al DMV sys.dm_db_index_physical_stats per vedere che tipo di allocazione della pagina (dati IN_ROW_DATA/LOB_DATA/ ROW_OVERFLOW_DATA) viene eseguita., Puoi anche controllare questo link nel caso in cui desideri una spiegazione dettagliata su come SQL Server esercita i limiti di riga e pagina con entrambi i tipi di dati varchar(n) e varchar(max).

Passiamo rapidamente a SSMS e vediamo come possiamo usare varchar (max). Eseguire il seguente script per inserire 1 record in cui il valore della colonna StringCol in ogni riga è di 15.000 B caratteri (cioè 15.000 byte).

Una limitazione dell’uso di varchar(max) è che non possiamo creare un indice che abbia un varchar(max) come colonna chiave, invece, è consigliabile fare un indice full-text su quella colonna.,

Una breve nota da fare – Da qui all’ultima tappa di questo articolo, menzioneremo varchar al posto di varchar(n). Non considerarlo come il varchar con valore predefinito = 1.

Per apprendere alcune differenze più interessanti tra varchar(n) e varchar(max) in SQL Server, considera di esaminare questo articolo, Confrontando i tipi di dati VARCHAR(max) vs VARCHAR(n) in SQL Server.

Supporto UTF-8 con SQL Server 2019 CTP

Prima di scavare in ciò che SQL Server 2019 funzione di anteprima ha da offrire per SQL varchar, diamo rapidamente un’occhiata a un tipo di dati più interessante – ‘nvarchar’ prima., Come SQL Server varchar, abbiamo SQL nvarchar, il prefisso n in nvarchar denota Unicode, cioè memorizza sia dati Unicode che non Unicode. La differenza fondamentale tra varchar e nvarchar è il modo in cui vengono memorizzati, varchar viene memorizzato come dati regolari a 8 bit (1 byte per carattere) e nvarchar memorizza i dati a 2 byte per carattere. Per questo motivo, nvarchar può contenere fino a 4000 caratteri e richiede il doppio dello spazio come SQL varchar. Puoi passare attraverso questo link per saperne di più su nvarchar in SQL Server.,

Con l’anteprima pubblica di SQL Server 2019, Microsoft ha annunciato il supporto per la codifica dei caratteri UTF-8 ai tipi di dati esistenti (varchar e char). Per coloro che non sono a conoscenza di UTF-8, sta per Unicode Transformation Format ed è una codifica basata su Unicode che supporta molte lingue. L ‘ 8 in UTF-8 significa che usa 1 byte (8 bit) per rappresentare un carattere in memoria. Allo stesso modo, UTF-16 utilizza 16 bit (2 byte) per rappresentare un carattere. Limiteremo l’ambito di questo nuovo miglioramento CTP di SQL Server 2019 a ‘SQL varchar’ solo in questo articolo.,

Questo miglioramento ha il seguente impatto in SQL Server: is

  1. Migliora la compatibilità dei dati

    Fino a SQL Server 2019 CTP, SQL varchar data type aveva la capacità di memorizzare solo dati non Unicode e con questa anteprima, ora possiamo creare una colonna varchar per memorizzare i dati Unicode in UTF-8 enabled collations (_UTF8). UTF-8 è consentito nei tipi di dati varchar ed è abilitato quando si crea o si modifica la collazione di un oggetto in una collazione con il suffisso UTF8. Questo aiuta a ridurre al minimo i problemi di conversione dei caratteri.,

  2. Riduzione dello storage e miglioramenti delle prestazioni

    Il supporto UTF-8 per il tipo di dati varchar offre notevoli risparmi di storage a seconda del set di caratteri in uso. Ad esempio, utilizzando un confronto abilitato UTF-8, la modifica del tipo di dati della colonna da nvarchar(20) a varchar(20) offre un calo significativo dei requisiti di archiviazione poiché nvarchar(20) richiede 40 byte per l’archiviazione e varchar(20) richiede 20 byte per la stessa stringa Unicode.

Nota a margine importante – Poiché questo miglioramento è ancora in anteprima, possiamo aspettarci ulteriori progressioni su questo fronte nel prossimo futuro., Tuttavia, i tipi di dati Unicode (UTF-16) esistenti (nchar, nvarchar e ntext) rimangono invariati nell’anteprima di SQL Server 2019.

Collazione con SQL varchar in SQL Server 2019 CTP

Collazione in SQL Server definisce configurazioni per determinare varie regole come case sensitivity, accent sensitivity, ordinamento, tipi di caratteri e larghezza ecc. Comprendere tutte queste proprietà e come funzionano con i tuoi dati diventa molto importante. Le regole di confronto possono essere impostate a livello di server, database, espressione o colonna., UTF-8 supporta le regole di confronto a livello di database o a livello di colonna in SQL Server 2019 CTP ed è abilitato quando si crea o si modifica la regola di confronto di database o colonna in una regola di confronto con suffisso UTF8.

Se si esegue la query seguente contro SQL Server 2019 CTP, sarà possibile vedere tutte le collazioni supportate da UTF-8 sull’istanza di SQL Server utilizzando la funzione (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., In questo modo, le regole di confronto specifiche vengono applicate ai dati della colonna specifica senza influire sul resto del database.

Dal momento che abbiamo a che fare con il tipo di dati di SQL Server varchar in questo post, vediamo come funziona la collazione delle colonne con il tipo di dati SQL varchar. Eseguire il codice seguente per modificare le regole di confronto delle colonne varchar di SQL Server da un tipo di regole di confronto al suffisso _UTF8. Si può leggere di più sul Confronto del database da qui.,TE TABELLA demovarcharcollate

(ID int PRIMARY KEY,
Descrizione varchar(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC NOT NULL
);
ALTER TABLE demovarcharcollate
MODIFICARE la Descrizione della COLONNA varchar(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8 NOT NULL;

funzione di SQL varchar nelle conversioni dei dati e la visualizzazione dei dati

SQL Server varchar è ampiamente usato per la visualizzazione dei dati nell’auspicabile formati utilizzando la Conversione e il Cast di funzioni in SQL Server., I dati reali si occupano di un mix di tipi di dati e devono essere compatibili tra loro (cioè appartengono allo stesso tipo di dati), prima di fare confronti con loro. SQL Server supporta sia conversioni implicite che esplicite.

  • Nota: Controlla SQL CAST e SQL CONVERT panoramica delle funzioni per ottenere ulteriori informazioni su come possiamo eseguire queste conversioni per la compatibilità dei dati.

Con un incessante bisogno di formattazione e visualizzazione dei dati nell’output richiesto, SQL varchar è davvero utile., Come sviluppatore SQL, trovo estremamente semplice utilizzare convert / cast con il tipo di dati varchar per eseguire assegnazioni o trasformazioni sui dati, in particolare per i campi data.

Sto usando la tabella FactInternetSales dall’esempio DB AdventureWorksDW2017 per mostrare come funziona questa funzione. È possibile fare riferimento a qualsiasi tabella con alcuni campi datetime e money/float per lo scopo della pratica. Lo script seguente converte due colonne datetime in tipi SQL varchar con stile 102 e 107 per visualizzare i dati nel formato aaaa.mm.gg e Mon gg, rispettivamente aaaa., Inoltre, la colonna SalesAmount con denaro come tipo di dati viene convertita in varchar e lo stile 3 viene applicato per visualizzare l’importo con virgole come mostrato nello screenshot qui sotto. Inoltre, ad esempio, vorremmo vedere i dati per gli ordini effettuati solo nell’anno 2010, utilizzando la funzione CAST per convertire la colonna datetime in dati varchar, il confronto delle stringhe viene eseguito nella clausola WHERE. Puoi anche andare oltre SQL convert date per trovare ulteriori informazioni sui formati e gli stili di conversione della data.,

Impatto sulla lunghezza della stringa di SQL varchar con funzioni CAST e CONVERT

SQL Server memorizza i dati di stringa lunga nel tipo di dati varchar comunemente usato e diventa utile conoscere le lunghezze previste e massime delle stringhe per visualizzare i risultati nell’interfaccia utente. Copia ed esegui il codice sottostante, dove stiamo passando una stringa lunga in una variabile varchar di lunghezza non specificata (@demovarchar) e anche in un’altra variabile con una lunghezza varchar definita (@demovarcharwithcast)., Microsoft prende 30 come lunghezza predefinita per SQL Varchar (con lunghezza varchar non specificata) nel server SQL quando viene utilizzato con le funzioni CAST e CONVERT. Nel nostro caso, anche se la lunghezza della stringa era 52, ha restituito 30 come lunghezza come mostrato nell’ultimo output del risultato.

Un punto importante da notare qui è che quando viene creato un campo varchar lunghezza non specificata, la lunghezza predefinita di tale campo è 1 (mostrato in colore rosso sotto)., Quando la lunghezza varchar non è specificata e viene utilizzata con le funzioni CAST o CONVERT, il CAST o CONVERT restituisce n = 30 come lunghezza stringa predefinita di questa conversione (contrassegnata in colore blu sotto).,le’) COME ‘LenOFStringPassed’

SELEZIONARE DATALENGTH(@demovarchar) COME ‘DefaultVarcharLength’
SELEZIONARE DATALENGtH(CAST(@demovarcharwithcast COME varchar(60))) AS ‘VarcharLengthSpecifiedWithCast’
SELEZIONARE DATALENGTH(CAST(@demovarcharwithcast COME varchar)) COME ‘DefaultVarcharLengthWithCast’

Storage e considerazioni sulle prestazioni di utilizzo di SQL varchar

i tipi di Dati come varchar, char e nvarchar sono tutti utilizzati per memorizzare la stringa di dati in SQL Server., SQL varchar memorizza la lunghezza della stringa variabile mentre SQL char memorizza la lunghezza della stringa fissa. Ciò significa che SQL Server varchar contiene solo i caratteri che gli assegniamo e char detiene lo spazio massimo della colonna indipendentemente dalla stringa che contiene.

A causa delle lunghezze di campo fisse, i dati vengono estratti direttamente dalla colonna senza eseguire alcuna manipolazione dei dati e le ricerche di indice contro varchar sono più lente di quelle dei campi char. CHAR è migliore delle prestazioni di VARCHAR, tuttavia, richiede spazio di memoria non necessario quando i dati non hanno una lunghezza fissa., Quindi, nei casi in cui la dimensione del disco non è un problema, si consiglia di utilizzare CHAR.

In parole semplici, diciamo che abbiamo una colonna con varchar(150) = ‘SQLShack’ – Questo richiederà 8 byte(sqlshack) + 2 byte per le informazioni sulla lunghezza = 10 byte in actual e per la colonna con char(150) = ‘SQLShack’ – Questo consumerà interi 150 byte su disco, indipendentemente da ciò che passiamo come stringa. L’esempio seguente mostra come CHAR utilizza lo spazio massimo assegnato (150) per adattarsi alla stringa passata e come la colonna varchar utilizza solo lo spazio necessario.,

Linea di fondo è quello di utilizzare il tipo di dati che si adatta alle nostre esigenze. È possibile utilizzare SQL varchar quando le dimensioni della colonna variano considerevolmente, utilizzare varchar (max) quando ci sono possibilità che la lunghezza della stringa possa superare gli 8000 byte, utilizzare char quando le dimensioni della colonna sono fisse e utilizzare nvarchar se è necessario memorizzare dati Unicode o multilingue.

Conclusione

I tipi di dati svolgono un ruolo fondamentale nella progettazione di database, ma sono spesso trascurati., Una buona comprensione e un uso accurato dei tipi di dati garantiscono la corretta natura e la lunghezza dei dati viene popolata nelle tabelle. L’intenzione di questo suggerimento è quello di aiutare a ottenere una comprensione delle caratteristiche di base e le caratteristiche di SQL Server varchar insieme con le sue prestazioni e gli aspetti di archiviazione in SQL Server. Abbiamo anche coperto i recenti progressi in SQL varchar nell’anteprima di SQL Server 2019.

Vedi anche

Puoi controllare questi altri articoli per continuare l’apprendimento sui tipi di dati SQL.,

  • la Comprensione del GUID tipo di dati in SQL Server
  • tipi di dati Spaziali SQL Server
  • Autore
  • Post Recenti
Gauri è un SQL Server Professional e dispone di 6+ anni di esperienza di lavoro con la global multinazionale di consulenza e tecnologia organizzazioni. È molto appassionata di lavorare su argomenti di SQL Server come Azure SQL Database, SQL Server Reporting Services, R, Python, Power BI, motore di database, ecc., Ha anni di esperienza nella documentazione tecnica ed è appassionata di authoring tecnologico.
Ha una profonda esperienza nella progettazione di soluzioni di dati e analisi e nel garantirne stabilità, affidabilità e prestazioni. È anche certificata in SQL Server e ha superato certificazioni come 70-463: Implementazione di Data Warehouse con Microsoft SQL Server.,
Visualizza tutti i messaggi di Gauri Mahajan

Ultimi messaggi di Gauri Mahajan (vedi tutti)
  • Esplorare Azure Analisi del Modello di Servizi e di Dati – 4 febbraio 2021
  • iniziamo con Azure Servizi di Analisi – gennaio 13, 2021
  • Collegare Azure Databricks dati di Potenza BI Desktop – 1 giugno 2020

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *