4

J'ai une table dans SQL Server dire "Temp" et il a des colonnes Addr1, Addr2, Addr3, Addr4 et quelques colonnes supplémentaires également là.Différence de taille de SQL Server pour une colonne

Ces Addr1, Addr2, Addr3 et Addr4 sont de type nvarchar. quand je vérifie la taille de cette colonne par l'explorateur d'objet. il les montre tous dans nvarchar (100).

enter image description here

Mais quand je vérifie les utiliser Alt + F1. Il affiche les détails dans le volet des résultats avec la longueur de 200. capture d'écran est ci-dessous.

enter image description here

pourquoi il est différent? Si j'entre plus de 100 caractères, j'obtiens des erreurs de troncature? On dirait qu'il ne prend que 100 caractères.

pouvez-vous s'il vous plaît laissez-moi savoir quelle est la valeur de longueur spécifie?

Merci, Prakash.

+0

[déjà anwered ici] (http://stackoverflow.com/a/21259797/4366471). –

+1

@WojciechTomczyk est-ce?Cette réponse ne semble pas traiter spécifiquement de la différence entre ce que vous voyez dans Object Explorer et les résultats de 'sp_help', indique simplement que les valeurs de' NVARCHAR' prennent deux fois plus d'espace de stockage. À moins que je ne comprenne mal la question/réponse à laquelle vous avez un lien. – 3N1GM4

+0

@ 3N1GM4 Oui, +1 pour cela. Je suis trop enthousiaste pour relier les réponses ... –

Répondre

9

Parce que la taille figurant dans l'Explorateur d'objets est le nombre de caractères et la taille figurant dans le résultat de votre requête à sp_help est le nombre de octets.

VARCHAR valeurs dans SQL utilisent 1 octet par caractère, tandis que NVARCHAR valeurs utilisent 2 octets par caractère. Les deux ont également besoin d'un surcoût de 2 octets - voir ci-dessous. Donc, parce que vous regardez les colonnes NVARCHAR, celles-ci ont besoin de 200 (bien en fait 202) octets pour stocker 100 caractères, alors qu'un VARCHAR ne nécessiterait que 100 (vraiment 102).

Références:

MSDN: char and varchar

La taille de stockage est la longueur réelle des données entrées + 2 octets.

MSDN: nchar and nvarchar:

La taille de stockage, en octets, est deux fois la longueur réelle des données entrées + 2 octets.

(Souligné par l'auteur)

MSDN: sp_help:

Fournit des informations sur un objet de base de données (tout objet répertorié dans la vue de la compatibilité sys.sysobjects), un type de données défini par l'utilisateur, ou un type de données.

 
    /------------------------------------------------------------------------\ 
    | Column name | Data type | Description         | 
    |-------------+-----------+----------------------------------------------| 
    | Length | smallint | Physical length of the data type (in bytes). | 
    \------------------------------------------------------------------------/ 
+0

Bon à savoir! :) –

+0

Merci. maintenant je l'obtiens .. –

+0

Sentez-vous libre d'accepter la réponse si elle a répondu à votre question @ ps_prakash02 - content que je pourrais aider! – 3N1GM4