Nous utilisons actuellement dans notre base de données SQL Server 2012 varchar
, et nous aimerions changer cela nvarchar
. J'ai généré un script pour le faire.
Ma question est la suivante: existe-t-il des différences dans la façon dont SQL Server écrit en varchar
colonnes par rapport aux nvarchar
colonnes? Je suis préoccupé par un certain nombre de procédures d’arrière-plan.
Edit: Vous
ne savez pas si cela vous aidera, mais les colonnes ne sont pas indexées, ni f / k, ni contraintes.
sql-server
varchar
Chris L
la source
la source
Réponses:
Vous devez être sûr que vous préfixez les littéraux de chaîne Unicode avec un préfixe N. Par exemple, ceux-ci fonctionneront différemment si le type de données sous-jacent est
NVARCHAR
:Résultats:
Pour les utilisateurs d'appareils mobiles ou les navigateurs décrépis qui affichent des caractères de boîte au lieu de caractères Unicode, voici à quoi ça ressemble:
la source
La principale préoccupation concerne l'
nvarchar
utilisation de 2 octets par caractère, alors que la valeurvarchar
1.nvarchar(4000)
utilise la même quantité d'espace de stockage quevarchar(8000)
*.En plus de toutes vos données de personnage nécessitant deux fois plus d'espace de stockage, cela signifie également:
nvarchar
colonnes plus courtes pour conserver les lignes dans la limite de 8060 octets de lignes / 8 000 caractères.nvarchar(max)
colonnes, elles seront déplacées plus rapidement que prévuvarchar(max)
.nvarchar
colonnes plus courtes pour rester dans la limite de clé d'index de 900 octets (je ne sais pas pourquoi vous voudriez utiliser une clé d'index de cette taille, mais vous ne le savez jamais).En outre, travailler avec
nvarchar
n'est pas très différent, en supposant que votre logiciel client est conçu pour gérer Unicode. SQL Server convertira de manière transparente un élémentvarchar
ennvarchar
, vous n'avez donc pas strictement besoin du préfixe N pour les littéraux de chaîne, sauf si vous utilisez des caractères à 2 octets (c.-à-d. Unicode) dans le littéral. Sachez que la couléenvarchar
devarbinary
rendements différents résultats que de faire la même chose avecvarchar
. Le point important est que vous n’aurez pas à changer immédiatement chaque littéral varchar en nvarchar pour que l’application continue de fonctionner, ce qui facilite le processus.* Si vous utilisez la compression de données (la compression assez légère de ligne est, Enterprise Edition requise avant SQL Server 2016 SP1 ) vous trouverez généralement
nchar
etnvarchar
prendre plus d' espace quechar
etvarchar
, en raison de la compression Unicode ( en utilisant l'algorithme SDU) .la source
Pensez aux différences majeures suivantes:
la source
nvarchar était requis pour la réplication de fusion RDP depuis une base de données mobile vers SQL Server 2005. De plus, LTrim (), RTrim () et Trim () étaient beaucoup utilisés, car nvarchar ne supprimait pas automatiquement les espaces de saisie des .
Je ne sais pas si cela a changé ces dernières années ou non, mais nvarchar est maintenant la norme utilisée pour les connexions au site Web .NET Simple Membership sur VS Pro 2017 utilisées dans la base de données générée.
la source
Si vous utilisez NVarchar sur Varchar et que vous n'êtes pas obligé de prendre en charge MULTI-LINQUAL, vous augmentez le stockage pour la base de données et les sauvegardes (locales et hors site). Les bases de données modernes doivent prendre en charge les deux et tous les succès de conversion doivent être pris en compte dans la conception.
la source