Différences entre les types de données char, nchar, varchar et nvarchar sur SQL Server

Par : Sherlee Dizon | Mis à jour : 2016-06-14 | Commentaires (4) | Associés : 1 | 2 | 3 | Plus > Types de données

Problème

Les différences de char, nchar, varchar et nvarchar de SQL Server sont fréquemmentdiscutées non seulement lors des entretiens, mais aussi par les développeurs lors des discussions sur la conception de la base de données. Dans cette astuce, je voudrais partager non seulement les différences de base,mais aussi ce que nous devons savoir et être conscients de l’utilisation de chaque type de données.

Solution

Char, nchar, varchar et nvarchar sont tous utilisés pour stocker des données de type texte ou chaîne de caractères dans les bases de donnéesSQL Server.

  • Char – est le synonyme SQL-92 de caractère. Les données sont complétées par des blancs/espaces pour remplir la taille du champ. Type de données de longueur fixe.
  • nchar – est le synonyme SQL-92 de char national et de caractère national.Type de données à longueur fixe.
  • varchar – est le synonyme SQL-92 de caractère variable. Type de données à longueur variable.
  • nvarchar – est le synonyme SQL-92 de national char varying et nationalcharacter varying. Type de données à longueur variable.

Que signifie N dans SQL Server

Vous vous demandez peut-être à quoi correspond le N ? N signifieNational Language Character Set et est utilisé pour spécifier une chaîne de caractères Unicode. Lorsque vous utilisez des types de donnéesUnicode, une colonne peut stocker tout caractère défini par la norme Unicode,ce qui inclut tous les caractères définis dans les différents jeux de caractères. Notez que les types de données Unicode prennent deux fois plus d’espace de stockage que les types de données non-Unicode.

Unicode est généralement utilisé dans les applications de base de données qui sont conçues pour faciliter les pages de code qui s’étendent au-delà des pages de code anglaises et d’Europe occidentale. Il est conçu pour que les jeux de caractères étendus puissent encore « tenir » dans les colonnes de la base de données.Ce que cela signifie, c’est que les types de données de caractères Unicode sont limités à la moitié de l’espace,car chaque octet prend en fait deux octets pour stocker les données (Unicode est parfois qualifié de « double largeur »). SQL Server prend en charge Unicode depuis SQL Server7.0 en fournissant des types de données nchar/nvarchar/ntext. SQL Server ne prend pas en charge l’encodageUTF-8 pour les données Unicode, mais il prend en charge l’encodageUTF-16.

J’ai réalisé un tableau ci-dessous qui servira de référence rapide.

Différences entre char, nchar, varchar et nvarchar dans SQL Server

char nchar varchar nvarchar
Type de données des caractères Non-Unicode à longueur fixe La longueur fixe Unicode peut stocker à la fois des caractères non-Unicode et Unicode(i.e. japonais, coréen etc.) Non-Unicode à longueur variable Unicode à longueur variable peut stocker à la fois des caractères non-Unicode et Unicode(i. e. japonais, coréen etc.)
Longueur maximale jusqu’à 8 000 caractères jusqu’à 4 000 caractères jusqu’à 8 000 caractères jusqu’à 4,000 caractères Taille des caractères Prend 1 octet par caractère Prend 2 octets par caractère Unicode/non Unicode Prend 1 octet par caractère Prend 2 octets par caractère Unicode/non Unicode .Unicode Taille de stockage n octets 2 fois n octets Longueur réelle (en octets) 2 fois la longueur réelle (en octets) Utilisation lorsque la longueur des données est constante ou des colonnes de longueur fixe utiliser uniquement si vous avez besoin d’un support Unicode tel que les caractères Kanji japonais ou KoreanHangul en raison de la surcharge de stockage utiliser lorsque la longueur des données est variable ou des colonnes de longueur variable et siactuel. données sont toujours bien inférieures à la capacité utilisé uniquement si vous avez besoin d’un support Unicode tel que les caractères Kanji japonais ou KoreanHangul en raison de la surcharge de stockage
Une requête qui utilise un paramètre varchar effectue une recherche d’index en raison des ensembles de collation de colonnes La requête qui utilise un paramètre nvarchar effectue un balayage d’index en raison des ensembles de collation de colonnes

Avantages et inconvénients de char, nchar, varchar et nvarchar dans SQLServer

Types de données Avantages Inconvénients
char Les performances de la requête sont meilleures car il n’est pas nécessaire de déplacer la colonne lors de la mise à jour.
Pas besoin de stocker la longueur de la chaîne de caractères dans les deux derniers octets.
Si elle n’est pas utilisée correctement, elle peut prendre plus d’espace que varchar puisqu’elle est de longueur fixe et que nous ne connaissons pas la longueur de la chaîne à stocker. Il n’est pas bon pour la compression puisqu’il incorpore des caractères d’espacement à la fin.
Varchar Comme il est de longueur variable, il prend moins d’espaces mémoire. Diminue les performances de certaines requêtes SQL.
nchar/nvarchar Supporte de nombreux ordinateurs clients qui exécutent différentes locales. Si elle n’est pas utilisée correctement, elle peut utiliser beaucoup d’espace de stockage supplémentaire.

Avec la croissance et l’innovation des applications web, il est encore plus important de supporter les ordinateurs clients qui exécutent différentes locales. La façon la plus simple de gérer les données de caractères dans les bases de données internationales est de toujours utiliser les types de données Unicodenchar, nvarchar et ntext, au lieu de leurs équivalents non-Unicode,char, varchar et text.

Unicode est une norme de mappage des points de code aux caractères. Comme elle est conçue pour couvrir tous les caractères de toutes les langues du monde, il n’est pas nécessaire d’avoir différentes pages de code pour gérer différents ensembles de caractères. SQL Server prend en charge la norme Unicode, version 3.2. Si toutes les applications qui travaillent avec des bases de données internationales utilisent également des variables Unicode au lieu de variables non-Unicode, il n’est pas nécessaire d’effectuer des traductions de caractères dans le système. Les clients verront les mêmes caractères dans les données que tous les autres clients.

SQL Server stocke toutes les données textuelles du catalogue système dans des colonnes ayant des types de données Unicode. Les noms des objets de base de données, tels que les tables, les vues et les procédures stockées,sont stockés dans des colonnes Unicode. Cela permet de développer des applications en utilisant uniquement Unicode et d’éviter les problèmes liés aux conversions de pages de code.

N’oubliez pas, lorsque vous développez de nouvelles applications, de vous demander si elles seront utilisées à l’échelle mondialecar cela vous aidera à déterminer s’il faut utiliser nchar et nvarchar pour prendre en charge différentes langues.

Prochaines étapes

Apprenez-en davantage en lisant et en explorant ce qui suit :

  • Prenez aussi le temps de lire cette astuce qui pourrait vous aider à planifier votre conception de base de donnéesDéfinition des types et des tailles de données
  • En savoir plus sur l’importance de la cohérence des types de donnéesConsistance des types de données du serveur SQL
  • Comparaison des types de données du serveur SQL et d’Oracle
  • Si vous avez une application que vous prévoyez de prendre globalement essayez d’explorer avec des caractères globaux. Qui sait si vous réussissez, vous pourriez augmenter vos ventes et faire passer vos applications au niveau supérieur.

Dernière mise à jour : 2016-06-14

get scripts

bouton du prochain conseil

A propos de l’auteur

MSSQLTips auteur Sherlee DizonSherlee Dizon est un consultant en informatique et un développeur d’applications web avec plus de 14 ans d’expérience en tant que développeur de logiciels et de sites web.
Voir tous mes conseils

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *