nchar et nvarchar (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Les types de données de caractères qui sont soit de taille fixe, nchar, soit de taille variable, nvarchar. Dans SQL Server 2012 (11.x) et versions ultérieures, lorsqu’un classement de caractères supplémentaires (SC) est utilisé, ces types de données stockent la plage complète de données de caractères Unicode et utilisent l’encodage 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 deux fois 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 substitution). Les synonymes ISO de nchar sont national char et national character.

nvarchar [ ( n | max ) ]

Données de type chaîne de taille variable. La valeur de n définit la taille de chaîne en paires octets et peut être 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 deux fois n octets + 2 octets. Toutefois, 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 substitution). 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. Ce concept est similaire à la définition de char et varchar.

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 N préfixe, la chaîne est convertie en page de codes par défaut de la base de données qui risque de ne pas reconnaître certains caractères. Dans SQL Server 2019 (15.x) et versions ultérieures, lorsqu’un classement UTF-8 est utilisé, la page de codes par défaut est capable de stocker le jeu de caractères UTF-8 Unicode.

Lorsque vous préfixez une constante de chaîne avec la lettre N, la conversion implicite entraîne une chaîne UCS-2 ou UTF-16 si la constante à convertir ne dépasse pas la longueur maximale du type de données de chaîne nvarchar (4 000). Dans le cas contraire, la conversion implicite entraîne un nvarchar(max) de grande valeur.

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 entraîner des erreurs (telles que l’erreur 512) que les utilisateurs peuvent ne pas anticiper pendant certaines 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 de caractères, consultez char et varchar. Pour plus d’informations sur la conversion entre les types de données, consultez CAST et CONVERT.