Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Quando dobbiamo usare NVARCHAR/NCHAR invece di VARCHAR/CHAR in SQL Server?

Il vero motivo per cui vuoi usare NVARCHAR è quando hai diversi lingue nella stessa colonna, devi indirizzare le colonne in T-SQL senza decodifica, vuoi poter vedere i dati "nativamente" in SSMS o vuoi standardizzare su Unicode.

Se tratti il ​​database come un archivio stupido, è perfettamente possibile memorizzare stringhe larghe e codifiche diverse (anche a lunghezza variabile) in VARCHAR (ad esempio UTF-8). Il problema si verifica quando si tenta di codificare e decodificare, soprattutto se la tabella codici è diversa per righe diverse. Significa anche che SQL Server non sarà in grado di gestire facilmente i dati ai fini dell'esecuzione di query all'interno di T-SQL su colonne codificate (potenzialmente in modo variabile).

L'utilizzo di NVARCHAR evita tutto questo.

Consiglierei NVARCHAR per qualsiasi colonna che conterrà dati inseriti dall'utente relativamente non vincolati.

Consiglierei VARCHAR per qualsiasi colonna che sia una chiave naturale (come targa di un veicolo, SSN, numero di serie, codice di matricola, numero d'ordine, nominativo dell'aeroporto, ecc.) Che è tipicamente definita e vincolata da uno standard o da una legislazione o convenzione. Anche VARCHAR per immesso dall'utente e molto vincolato (come un numero di telefono) o un codice (ATTIVO/CHIUSO, S/N, M/F, M/S/G/W, ecc.). Non c'è assolutamente alcun motivo per usare NVARCHAR per quelli.

Quindi per una semplice regola:

VARCHAR quando garantito per essere vincolatoNVARCHAR altrimenti