nchar et nvarchar (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Les types de données de caractères qui sont soit de taille fixe, nchar, soit de taille variable, nvarchar. À partir de SQL Server 2012 (11.x), quand un classement prenant en charge les caractères supplémentaires (SC) est utilisé, ces types de données stockent la plage complète des données caractères Unicode et utilisent le codage de caractères UTF-16 . Si un classement autre que SC est spécifié, ces types de données stockent uniquement le sous-ensemble de données caractères pris en charge par le codage de caractères UCS-2.

Arguments

nchar [ ( n ) ]

Données de type chaîne de taille fixe. n définit la taille de chaîne en paires d’octets, et doit être une valeur comprise entre 1 et 4 000. La taille de stockage est le double de n octets. Pour l'encodage UCS-2, la taille de stockage est deux fois n octets et le nombre de caractères pouvant être stockés est également n. Pour l'encodage UTF-16, la taille de stockage est toujours le double de n octets, mais le nombre de caractères pouvant être stockés peut être inférieur à n, car les caractères supplémentaires utilisent deux paires d'octets (également appelées paires de remplacement). Les synonymes ISO de nchar sont national char et national character.

nvarchar [ ( n | max ) ]

Données de type chaîne de taille variable. n définit la taille de chaîne en paires d’octets, et peut être une valeur comprise entre 1 et 4 000. max indique que la taille de stockage maximale est de 2^31-1 caractères (2 Go). La taille de stockage est deux fois n octets + 2 octets. Pour l'encodage UCS-2, la taille de stockage est deux fois n octets + 2 octests et le nombre de caractères pouvant être stockés est également n. Pour l'encodage UTF-16, la taille de stockage est toujours le double de n octets + 2 octets, mais le nombre de caractères pouvant être stockés peut être inférieur à n, car les caractères supplémentaires utilisent deux paires d'octets (également appelées paires de remplacement). Les synonymes ISO de nvarchar sont national char varying et national character varying.

Remarques

Contrairement à une idée fausse qui circule sur nchar(n) et nvarchar(n), n ne définit pas le nombre de caractères. Dans nchar(n) et nvarchar(n), n définit la longueur de chaîne en paires d’octets (0-4 000). n ne définit jamais des nombres de caractères pouvant être stockés. Cette définition est similaire à celle de char(n) et varchar(n).

En fait, lors de l’utilisation de caractères définis dans la plage Unicode 0 à 65 535, un caractère peut être stocké pour chaque paire d’octets, d’où cette idée fausse. Toutefois, dans les plages Unicode supérieures (65 536 à 1 114 111), un caractère peut utiliser deux paires d’octets. Par exemple, dans une colonne définie en tant que nchar(10), le moteur de base de données peut stocker 10 caractères qui utilisent une seule paire d’octets (plage Unicode 0 à 65 535), mais moins de 10 caractères avec deux paires d’octets (plage Unicode 65 536 à 1 114 111). Pour plus d’informations sur le stockage Unicode et les plages de caractères, consultez Différences de stockage entre UTF-8 et UTF-16.

Quand la valeur de n n’est spécifiée ni dans une définition de données ni dans une instruction de déclaration de variable, la longueur par défaut est 1. Quand la valeur de n n’est pas précisée avec la fonction CAST, la longueur par défaut est 30.

Si vous utilisez nchar ou nvarchar, suivez ces conseils :

  • Utilisez nchar quand les tailles des entrées de données de la colonne sont cohérentes.
  • Utilisez nvarchar quand les tailles des entrées de données de la colonne varient considérablement.
  • Utilisez nvarchar(max) quand les tailles des entrées de données de la colonne varient considérablement et que la longueur de chaîne peut dépasser 4 000 paires d’octets.

sysname est un type de données défini par l’utilisateur fourni par le système qui présente la même fonctionnalité que nvarchar(128), à la différence qu’il n’accepte pas la valeur Null. sysname est utilisé pour faire référence aux noms des objets de base de données.

Les objets qui utilisent nchar ou nvarchar reçoivent le classement par défaut de la base de données, sauf si un classement spécifique est défini à l’aide de la clause COLLATE.

SET ANSI_PADDING est toujours ON pour nchar et nvarchar. SET ANSI_PADDING OFF ne s’applique pas aux types de données nchar et nvarchar.

Préfixez les constantes de chaîne de caractères Unicode avec la lettre N pour signaler une entrée UCS-2 ou UTF-16, selon qu’un classement SC est utilisé ou non. Sans le préfixe N, la chaîne est convertie en page de codes par défaut de la base de données et ne reconnaîtra peut-être pas certains caractères. À compter de SQL Server 2019 (15.x), quand un classement compatible UTF-8 est utilisé, la page de codes par défaut peut stocker le jeu de caractères Unicode UTF-8.

Lorsque vous préfixez une constante de chaîne avec la lettre N, la conversion implicite donne une chaîne UCS-2 ou UTF-16 si la constante à convertir ne dépasse pas la longueur maximale pour le type de données de chaîne nvarchar (soit 4 000). Sinon, la conversion implicite génère une chaîne nvarchar(max) de valeur élevée.

Avertissement

Chaque colonne varchar(max) ou nvarchar(max) non Null demande 24 octets d’allocation fixe supplémentaire calculée par rapport à la limite de 8 060 octets par ligne pendant une opération de tri. Ces octets supplémentaires peuvent produire une limite implicite du nombre de colonnes varchar(max) ou nvarchar(max) non Null dans une table. Aucune erreur spéciale n'est fournie quand la table est créée (mis à part l’avertissement habituel indiquant que la taille maximale de ligne dépasse la taille maximale autorisée de 8 060 octets) ou quand les données sont insérées. Cette grande taille de ligne peut provoquer des erreurs (comme l’erreur 512) que les utilisateurs peuvent ne pas anticiper au cours d’opérations normales. Deux exemples d’opérations sont la mise à jour d’une clé d’index cluster ou le tri de l’intégralité du jeu de colonnes.

Convertir des données de type caractères

Pour plus d’informations sur la conversion de données caractères, consultez char et varchar (Transact-SQL).

Voir aussi