Da: Sherlee Dizon | Aggiornato: 2016-06-14 | Commenti (4) | Correlati: 1 | 2 | 3 | Altro > Tipi di dati
Problema
Le differenze di SQL Server char, nchar, varchar e nvarchar sono frequentemente discusse non solo durante le interviste, ma anche dagli sviluppatori durante le discussioni sulla progettazione di database. In questo suggerimento vorrei condividere non solo le differenze di base, ma anche ciò che dobbiamo sapere ed essere consapevoli quando usiamo ciascun tipo di dati.
Soluzione
Char, nchar, varchar e nvarchar sono tutti usati per memorizzare dati di testo o stringhe nei database SQL Server.
- char – è il sinonimo SQL-92 di carattere. I dati sono riempiti con spazi vuoti/spazi per riempire la dimensione del campo. Tipo di dati a lunghezza fissa.
- nchar – è il sinonimo SQL-92 di char nazionale e carattere nazionale.
- varchar – è il sinonimo SQL-92 di carattere variabile. Tipo di dati a lunghezza variabile.
- nvarchar – è il sinonimo SQL-92 di carattere nazionale variabile e carattere nazionale variabile. Tipo di dati di lunghezza variabile.
Cosa significa N in SQL Server
Ti potresti chiedere per cosa sta la N? N sta perNational Language Character Set e si usa per specificare una stringa Unicode. Quando si usano i tipi di dati Unicode, una colonna può memorizzare qualsiasi carattere definito dallo standard Unicode, che include tutti i caratteri definiti nei vari set di caratteri. Notate che i tipi di dati Unicode occupano il doppio dello spazio di memoria dei tipi di dati non-Unicode.
Unicode è tipicamente usato in applicazioni di database che sono progettate per facilitare pagine di codice che si estendono oltre le pagine di codice dell’inglese e dell’Europa occidentale. Ciò significa che i tipi di dati Unicode sono limitati a metà dello spazio, perché ogni byte richiede due byte per memorizzare i dati (Unicode è talvolta definito “double-wide”). SQL Server ha supportato Unicode da SQL Server7.0 fornendo tipi di dati nchar/nvarchar/ntext. SQL Server non supporta la codificaUTF-8 per i dati Unicode, ma supporta la codificaUTF-16.
Ho fatto una tabella qui sotto che servirà come riferimento rapido.
Differenze di char, nchar, varchar e nvarchar in SQL Server
char | nchar | varchar | nvarchar | ||
---|---|---|---|---|---|
Tipo di dati carattere | Non-Unicode a lunghezza fissa | Unicode a lunghezza fissa può memorizzare sia caratteri non-Unicode che Unicode (es.e. giapponese, coreano ecc.) | Lunghezza variabile non Unicode | Lunghezza variabile Unicode può memorizzare sia caratteri non Unicode che Unicode (es. giapponese, coreano ecc.).) | |
Lunghezza massima | fino a 8.000 caratteri | fino a 4.000 caratteri | fino a 8.000 caratteri | fino a 4,000 caratteri | |
Dimensione carattere | occupa 1 byte per carattere | occupa 2 byte per carattere Unicode/Non-Unicode | occupa 1 byte per carattere | occupa 2 byte per carattere Unicode/Non-Unicode | |
Dimensione di archiviazione | n byte | 2 volte n byte | Lunghezza effettiva (in byte) | 2 volte lunghezza effettiva (in byte) | |
Uso | uso quando la lunghezza dei dati è costante o colonne di lunghezza fissa | usare solo se è necessario il supporto Unicode come il giapponese Kanji o coreanoHangul caratteri a causa del sovraccarico di memoria | usato quando la lunghezza dei dati è variabile o colonne di lunghezza variabile e se effettivi dati è sempre molto inferiore alla capacità | usato solo se è necessario il supporto Unicode come i caratteri giapponesi Kanji o coreaniHangul a causa del sovraccarico di memoria | |
query che utilizza un varchar fa una ricerca per indice a causa dei set di colonne | query che usa un parametro nvarchar fa una ricerca per indice a causa dei set di colonne |
Svantaggi e svantaggi di char, nchar, varchar e nvarchar in SQLServer
Tipi di dati | Svantaggi | Svantaggi | |
---|---|---|---|
char | Le prestazioni della query sono migliori poiché non è necessario spostare la colonna durante l’aggiornamento. Non è necessario memorizzare la lunghezza della stringa negli ultimi due byte. |
Se non utilizzato correttamente, può richiedere più spazio di varchar poiché è a lunghezza fissa e non sappiamo la lunghezza della stringa da memorizzare. Non è buono per la compressione poiché incorpora caratteri di spazio alla fine. | |
varchar | Poiché è di lunghezza variabile, richiede meno spazio in memoria. | Riduce le prestazioni di alcune query SQL. | |
nchar/nvarchar | Supporta molti computer client che eseguono diverse localizzazioni. | Se non utilizzato correttamente può utilizzare molto spazio di memoria extra. |
Con la crescita e l’innovazione delle applicazioni web, è ancora più importante supportare computer client che eseguono diverse localizzazioni. Il modo più semplice per gestire i dati dei caratteri nei database internazionali è quello di utilizzare sempre i tipi di dati Unicodenchar, nvarchar e ntext, invece dei loro equivalenti non Unicode, char, varchar e text.
Unicode è uno standard per la mappatura dei punti di codice ai caratteri. Poiché è progettato per coprire tutti i caratteri di tutte le lingue del mondo, non c’è bisogno di diverse pagine di codice per gestire diversi set di caratteri. SQL Server supporta lo standard Unicode, versione 3.2. Se tutte le applicazioni che lavorano con i database internazionali usano anche le variabili Unicode invece di quelle non Unicode, le traduzioni dei caratteri non devono essere eseguite da nessuna parte nel sistema. I client vedranno gli stessi caratteri nei dati come tutti gli altri client.
SQL Server memorizza tutti i dati testuali del catalogo di sistema in colonne con tipi di dati Unicode. I nomi degli oggetti del database, come tabelle, viste e stored procedure, sono memorizzati in colonne Unicode. Questo permette alle applicazioni di essere sviluppate usando solo Unicode, e aiuta ad evitare problemi con le conversioni delle pagine di codice.
Ricordatevi quando sviluppate nuove applicazioni di considerare se saranno usate globalmente perché questo vi aiuterà a determinare se usare nchar e nvarchar per supportare lingue diverse.
Passi successivi
Impara di più leggendo ed esplorando quanto segue:
- Prendi tempo per leggere anche questo suggerimento che potrebbe aiutarti nella pianificazione del tuo databasedesignDefining Data Types and Sizes
- Impara di più sull’importanza della consistenza del tipo di datiSQL Server Data Type Consistency
- Confronto tra SQL Server e Oracle datatypes
- Se hai un’applicazione che pensi di portare a livello globale prova ad esplorare con i caratteri globali. Chissà, se hai successo potresti aumentare le tue vendite e portare le tue applicazioni al livello successivo.
Ultimo aggiornamento: 2016-06-14
Informazioni sull’autore
Vedi tutti i miei consigli