SQLShack (Français)

Classé dans : Articles | 0

dans cet article, nous allons passer en revue le type de données SQL VARCHAR, y compris une définition de base et un aperçu, les différences avec varchar(n), Le support UTF-8, le classement, les considérations de performance et plus encore.

Les données jouent un rôle crucial dans toute organisation et un attribut par lequel elles sont définies est appelé son type de données. En termes simples, le type de données indique le type de données qu’un objet, une variable ou une expression peut stocker., En tant que développeur SQL, lors de la création d’une table SQL, nous devons comprendre et décider quel type de données sera contenu par chaque colonne d’une table. Comme tout autre langage de programmation, SQL prend également en charge une gamme de types de données pouvant contenir des données entières, des données de date et d’heure, des données de caractères, etc. et vous permet de définir vos propres types de données. SQL varchar est l’un des types de données les plus connus et les plus utilisés du lot. Dans cet article, nous allons parcourir différentes facettes du serveur SQL varchar dans le serveur SQL.

Voici le contour que nous couvrirons dans ce bloc.,

  1. Introduction au type de données SQL Server varchar dans SQL Server
  2. utilisation de varchar pour les gros blocs de texte
  3. Quoi de neuf dans SQL Server 2019 preview for varchar datatype?,
  4. Influence du classement sur VARCHAR SQL dans SQL Server
  5. prise en charge UTF-8 avec varchar dans SQL Server 2019 CTP
  6. SQL Server varchar pour les conversions de données et l’affichage des données
  7. considérations de stockage et de performance en utilisant SQL Server varchar
  8. Impact sur la longueur de chaîne de SQL varchar avec

    alors, qu’est-ce que varchar dans SQL?

    comme son nom l’indique, varchar signifie des données de caractères qui varient., Également connu sous le nom de caractère Variable, il s’agit d’un type de données de chaîne de longueur indéterminée. Il peut contenir des chiffres, des lettres et des caractères spéciaux. Microsoft SQL Server 2008 (et versions ultérieures) peut stocker jusqu’à 8000 caractères en tant que longueur maximale de la chaîne à l’aide du type de données varchar. SQL varchar contient généralement 1 octet par caractère et 2 octets de plus pour les informations de longueur. Il est recommandé d’utiliser varchar comme type de données lorsque les colonnes ont une longueur variable et que les données réelles sont bien inférieures à la capacité donnée. Passons à SSMS et voyons comment fonctionne varchar.,

    l’exemple suivant crée trois variables (nom, sexe et Âge) avec varchar comme type de données et différentes valeurs qui leur sont assignées. Comme le montrent les ensembles de résultats ci-dessous, par défaut, la longueur de chaîne des colonnes SQL varchar est 1 et elle ne renvoie que la première valeur des variables(le reste de la chaîne étant tronqué) lorsqu’aucune longueur de chaîne n’est transmise pour le type de données varchar. La fonction len () est utilisée pour déterminer le nombre de caractères stockés dans la colonne varchar.

    en quoi SQL VARCHAR(max) est-il différent de varchar(n)?,

    Il y a des moments où les développeurs SQL (y compris moi-même) définissent généralement varchar datatype sans longueur, et par la suite, ne parviennent pas à insérer des enregistrements de chaîne dans la table SQL, en effet, SQL Server alloue 1 espace de caractère comme valeur par défaut à la colonne varchar définie sans longueur. Dans les scénarios pratiques, varchar (n) est utilisé pour stocker la valeur de longueur variable sous forme de chaîne, ici ‘n’ désigne la longueur de la chaîne en octets et peut aller jusqu’à 8000 caractères., Maintenant, allons plus loin et voyons comment nous pouvons stocker des données SQL varchar avec une longueur de chaîne dans la colonne d’une table SQL. Ci-dessous script crée la table Demovarchar avec quelques données en elle. Et l’écran de résultat affiche les enregistrements de 7 employés en fonction de leurs départements, de leur âge, etc.

    supposons qu’il y ait un nouvel ajout d’un employé dans l’organisation et que nous, en tant que développeurs de données SQL, devions insérer ce nouvel enregistrement dans le tableau ci-dessus à l’aide de L’instruction INSERT SQL. Ci-dessous est un exemple illustré.,

    1
    INSERT INTO Demovarchar VALUES(‘Newton Hamilton’, ‘Isaac’,’M’,’Design Head’,69)

    Oops, SQL Server encountered an error and terminated the statement saying string or binary data would be truncated., Cela s’est produit parce que la colonne LastName varchar(10) peut contenir jusqu’à 10 caractères et nous essayons ici d’insérer un nouvel enregistrement avec une longueur de chaîne(‘Newton Hamilton’) qui est clairement supérieure à 10 caractères. Comme solution rapide, nous pouvons modifier la table et augmenter le type de données de la colonne SQL VARCHAR, disons à varchar(50) pour insérer la nouvelle ligne. Exécutez le script ci-dessous pour modifier et insérer un nouvel enregistrement dans la table., De plus, vous pouvez utiliser les fonctions LEN() et DATALENGTH () pour déterminer respectivement le nombre de caractères et la taille de stockage en octets stockés dans la colonne varchar.

    Nous avons observé ci-dessus comment nous pouvons définir ou modifier la longueur de chaîne dans la colonne SQL VARCHAR pour répondre aux besoins de l’entreprise. Cependant, considérons un scénario, où nous ne sommes pas sûrs de la taille des données qui va être chargée dans nos tables SQL, dans de telles circonstances, inspecter et modifier la taille du type de données pour chaque colonne n’est pas un choix viable., L’une des options pour gérer cela pourrait être de définir la longueur de la chaîne sur la barre supérieure dans la colonne SQL Server varchar (à condition que vous ayez une estimation approximative de la longueur de la colonne de chaîne).

    un point important à prendre en considération, nous pouvons utiliser la longueur de chaîne jusqu’à varchar(8000) uniquement car il s’agit du nombre maximum de caractères que le type de données SQL VARCHAR(n) peut contenir. Ainsi, dans les cas où il y a des chances que la longueur de chaîne de la colonne varchar dépasse 8000 octets, l’utilisation de varchar(8001) ou de tout autre élément supérieur entraînera une erreur., One short example demonstrating this fact is shown below.

    1
    2

    DECLARE @name AS varchar(8001) = ‘john parker d »souza’;
    SELECT @name Name

    SQL Server 2005 got around this limitation of 8KB storage size and provided a workaround with varchar(max)., Il s’agit d’un grand type de données de caractères de longueur variable non Unicode et peut stocker un maximum de 2^31-1 octets (2 Go) de caractères non Unicode.

    quand j’ai été introduit pour la première fois aux concepts de varchar (n) et SQL VARCHAR, la question commune comme tout autre débutant que j’avais était de savoir pourquoi ne pouvons-nous pas simplement déclarer une colonne de type de données varchar (8500) ou supérieur, puisque nous avons varchar (max) qui prend en charge le stockage jusqu’à 2 Go et pourquoi)?, J’ai obtenu mes réponses sur une petite recherche que SQL Server utilise la page pour stocker des données et que la taille de chaque page est de 8 KO(à l’exclusion de l’en-tête de page, de la taille des décalages de ligne). Si les données à stocker sont inférieures ou égales à 8000 octets, varchar(n) ou varchar(max) les stocke en ligne. Cependant, si les données dépassent la taille de 8000 octets, elles sont traitées comme un objet volumineux (LOB) et elles ne sont pas stockées en ligne mais dans des pages LOB séparées(LOB_DATA)., Dans ce cas, la ligne n’aura qu’un pointeur vers la page de données LOB où les données réelles sont présentes et SQL Server attribue automatiquement un indicateur de débordement à la page pour manipuler les lignes de données. En bref, si vous savez que les données peuvent dépasser 8000 octets, il est préférable d’utiliser varchar(max) comme type de données.

    nous pouvons nous référer au DMV sys.dm_db_index_physical_stats pour voir quel type d’allocation de page (IN_ROW_DATA data/ LOB_DATA / ROW_OVERFLOW_DATA) est effectuée., Vous pouvez également consulter ce lien si vous souhaitez des explications détaillées sur la façon dont SQL Server exerce les limites de ligne et de page avec les types de données varchar(n) et varchar(max).

    passons rapidement à SSMS et voyons comment nous pouvons utiliser varchar(max). Exécutez le script suivant pour insérer 1 enregistrement où la valeur de la colonne StringCol dans chaque ligne est de 15 000 caractères B (c’est-à-dire 15 000 octets).

    une limitation de l’utilisation de varchar(max) est que nous ne pouvons pas créer un index qui a un varchar(max) comme colonne clé, à la place, il est conseillé de faire un index en texte intégral sur cette colonne.,

    une note rapide à faire – D’ici à la dernière étape de cet article, nous mentionnerons varchar à la place de varchar(n). Ne le considérez pas comme le varchar avec la valeur par défaut = 1.

    pour apprendre quelques différences plus intéressantes entre VARCHAR(n) et varchar(max) dans SQL Server, pensez à parcourir cet article, en comparant les types de données varchar(max) vs varchar(n) dans SQL Server.

    prise en charge de L’UTF-8 avec SQL Server 2019 CTP

    avant de découvrir ce que la fonctionnalité de prévisualisation SQL Server 2019 A à offrir pour SQL varchar, examinons rapidement un autre type de données intéressant – ‘nvarchar’ en premier., Comme SQL Server varchar, nous avons SQL nvarchar, le préfixe n dans nvarchar indique Unicode, c’est-à-dire qu’il stocke à la fois des données Unicode et non Unicode. La principale différence entre varchar et nvarchar est la façon dont ils sont stockés, varchar est stocké en tant que données 8 bits régulières(1 octet par caractère) et nvarchar stocke les données à 2 Octets par caractère. Pour cette raison, nvarchar peut contenir jusqu’à 4000 caractères et il prend le double de L’espace comme SQL varchar. Vous pouvez passer par ce lien pour en savoir plus sur nvarchar dans SQL Server.,

    avec L’aperçu public de SQL Server 2019, Microsoft a annoncé la prise en charge du codage de caractères UTF-8 pour les types de données existants (varchar et char). Pour ceux qui ne connaissent pas UTF-8, Il signifie Unicode Transformation Format et est un codage basé sur Unicode qui prend en charge de nombreuses langues. Le 8 en UTF – 8 signifie qu’il utilise 1 octet (8 bits) pour représenter un caractère en mémoire. De même, UTF-16 utilise 16 bits (2 octets) pour représenter un caractère. Nous limiterons la portée de cette nouvelle amélioration CTP SQL Server 2019 à ‘SQL varchar’ uniquement dans cet article.,

    Cette amélioration a l’impact suivant dans SQL Server: est

    1. améliore la compatibilité des données

      Jusqu’à SQL Server 2019 CTP, SQL varchar data type avait la capacité de stocker uniquement des données non-Unicode et avec cet aperçu, nous pouvons maintenant créer une colonne varchar pour stocker des données Unicode UTF – 8 est autorisé dans les types de données varchar et est activé lors de la création ou de la modification du classement d’un objet en un classement avec le suffixe UTF8. Cela aide à minimiser les problèmes de conversion de caractères.,

    2. réduction du stockage et amélioration des performances

      la prise en charge de L’UTF-8 pour le type de données varchar permet de réaliser des économies de stockage substantielles en fonction du jeu de caractères utilisé. Par exemple, en utilisant un classement UTF-8 activé, la modification du type de données de colonne de nvarchar(20) à varchar(20) offre une baisse significative des besoins en stockage car nvarchar(20) nécessite 40 octets pour le stockage et varchar(20) a besoin de 20 octets pour la même chaîne Unicode.

    note de côté importante – puisque cette amélioration est toujours en avant-première, nous pouvons nous attendre à plus de progressions sur ce front dans un proche avenir., Cependant, les types de données Unicode (UTF-16) existants (nchar, nvarchar et ntext) restent inchangés dans L’aperçu SQL Server 2019.

    classement avec SQL varchar dans SQL Server 2019 CTP

    classement dans SQL Server définit des configurations pour déterminer diverses règles telles que la sensibilité à la casse, la sensibilité à l’accent, le tri, les types de caractères et la largeur, etc. Comprendre toutes ces propriétés et comment fonctionnent-elles avec vos données devient très important. Le classement peut être défini au niveau du serveur, de la base de données, de l’expression ou de la colonne., UTF – 8 prend en charge le classement au niveau de la base de données ou au niveau de la colonne dans SQL Server 2019 CTP et est activé lorsque vous créez ou modifiez le classement de la base de données ou de la colonne en un classement avec le suffixe UTF8.

    Si vous exécutez la requête ci-dessous sur SQL Server 2019 CTP, vous pourrez voir tous les classements pris en charge par UTF-8 sur votre instance de SQL Server à l’aide de function (fn_helpcollations()).,d= »284f85b8b5″>

1
2
3

SELECT Name, Description
FROM fn_helpcollations()
WHERE Name like ‘%UTF8’;

With SQL Server 2019 preview version, we can assign Unicode collations (UTF-8 supported) as well for SQL varchar columns using the COLLATE clause while declaring the varchar column., De cette façon, un classement spécifique est appliqué aux données de la colonne particulière sans avoir d’impact sur le reste de la base de données.

puisque nous traitons du type de données SQL Server varchar dans cet article, voyons comment fonctionne le classement des colonnes avec le type de données SQL VARCHAR. Exécutez le code ci-dessous pour modifier le classement des colonnes SQL Server VARCHAR d’un type de classement au suffixe _UTF8. Vous pouvez en savoir plus sur le classement des bases de données à partir d’ici.,TE table demovarcharcollate

(id INT PRIMARY KEY,
Description VARCHAR(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC NOT NULL
);
ALTER TABLE demovarcharcollate
ALTER COLUMN Description varchar(50) COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8 NOT NULL;

rôle de SQL varchar dans les conversions de données et L’affichage des données

SQL Server varchar est largement utilisé pour afficher des données dans les formats souhaitables à l’aide des fonctions convert et Cast dans SQL Server., Les données réelles traitent d’un mélange de types de données et doivent être compatibles les unes avec les autres (c’est-à-dire appartenir au même type de données), avant de les comparer. SQL Server prend en charge les conversions implicites et explicites.

  • REMARQUE: consultez L’aperçu des fonctions SQL CAST et SQL CONVERT pour obtenir plus d’informations sur la façon dont nous pouvons effectuer ces conversions pour la compatibilité des données.

avec un besoin incessant de formatage et d’affichage des données dans la sortie requise, SQL varchar est vraiment pratique., En tant que développeur SQL moi-même, je trouve extrêmement simple d’utiliser convert/cast avec le type de données varchar pour effectuer des affectations ou des transformations sur les données, en particulier pour les champs de date.

j’utilise la table FactInternetSales de L’exemple DB AdventureWorksDW2017 pour montrer comment cette fonctionnalité fonctionne. Vous pouvez vous référer à n’importe quelle table avec des champs datetime et money/float à des fins de pratique. Le script suivant convertit deux colonnes datetime en types SQL VARCHAR avec le style 102 et 107 pour afficher les données au format AAAA.mm.JJ et Mon JJ, AAAA respectivement., En outre, la colonne SalesAmount avec Money comme type de données est convertie en varchar et le style 3 est appliqué pour afficher le montant avec des virgules comme indiqué dans la capture d’écran ci-dessous. De plus, disons, nous voudrions voir les données pour les commandes passées au cours de l’année 2010 uniquement, en utilisant la fonction CAST pour convertir la colonne datetime en données varchar, la comparaison de chaînes est effectuée dans la clause WHERE. Vous pouvez également parcourir SQL convert date pour trouver plus d’informations sur les formats et les styles de conversion de date.,

Impact sur la longueur de chaîne de SQL VARCHAR avec les fonctions CAST et CONVERT

SQL Server stocke les données de chaîne longue dans le type de données varchar couramment utilisé et il devient utile de connaître les longueurs attendues et maximales des chaînes pour afficher les résultats Copiez et exécutez le code ci-dessous, où nous passons une longue chaîne dans une variable varchar de longueur non spécifiée (@demovarchar) et également dans une autre variable avec une longueur varchar définie (@demovarcharwithcast)., Microsoft prend 30 comme longueur par défaut pour SQL Varchar (avec une longueur varchar non spécifiée) dans SQL Server lorsqu’il est utilisé avec les fonctions CAST et CONVERT. Dans notre cas, même si la longueur de la chaîne était 52, elle renvoyait 30 comme longueur comme indiqué dans la dernière sortie de résultat.

un point important à noter ici est que lorsqu’un champ varchar de longueur non spécifiée est créé, la longueur par défaut de ce champ est 1 (montré en couleur rouge ci-dessous)., Lorsque varchar length n’est pas spécifié et est utilisé avec les fonctions CAST ou CONVERT, le CAST ou CONVERT renvoie n=30 comme longueur de chaîne par défaut de cette conversion (marquée en bleu ci-dessous).,le’) comme ‘LenOFStringPassed’

SELECT DATALENGTH(@demovarchar) comme ‘DefaultVarcharLength’
SELECT DATALENGtH(CAST(@demovarcharwithcast AS varchar(60))) comme ‘VarcharLengthSpecifiedWithCast’
SELECT DATALENGTH(CAST(@demovarcharwithcast AS varchar (60))) comme ‘varcharlengthspecifiedwithcast’
SELECT DATALENGTH (CAST (@demovarcharwithcast as varchar)) as ‘defaultvarcharlengthwithcast’

considérations sur le stockage et les performances en utilisant SQL varchar

les types de données tels que varchar, char et nvarchar sont tous utilisés pour stocker des données de chaîne dans SQL Server., SQL varchar stocke la longueur de chaîne variable alors que SQL char stocke la longueur de chaîne fixe. Cela signifie que SQL Server varchar ne contient que les caractères que nous lui assignons et char contient l’espace de colonne maximum quelle que soit la chaîne qu’il contient.

en raison des longueurs de champ fixes, les données sont extraites directement de la colonne sans aucune manipulation de données et les recherches d’index sur varchar sont plus lentes que celles des champs char. CHAR est meilleur que varchar en termes de performances, cependant, il prend de l’espace mémoire inutile lorsque les données n’ont pas de longueur fixe., Donc, dans les cas où la taille du disque n’est pas un problème, il est recommandé d’utiliser CHAR.

en termes simples, disons que nous avons une colonne avec varchar(150) = ‘SQLShack’ – cela prendra 8 octets(sqlshack) + 2 octets pour les informations de longueur = 10 octets en réel et pour la colonne avec char(150) = ‘sqlshack’ – cela consommera 150 Octets entiers sur le disque, indépendamment de ce que nous passons comme une chaîne. L’exemple ci-dessous montre comment CHAR utilise L’espace alloué maximum (150) pour tenir dans la chaîne passée et comment la colonne varchar utilise uniquement l’espace nécessaire.,

ligne de Fond est d’utiliser le type de données qui correspond à notre besoin. Vous pouvez utiliser SQL varchar lorsque les tailles de la colonne varient considérablement, utiliser varchar (max) lorsqu’il y a des chances que la longueur de chaîne dépasse 8000 octets, utiliser char lorsque les tailles de la colonne sont fixes et utiliser nvarchar s’il est nécessaire de stocker des données Unicode ou multilingues.

Conclusion

les types de données jouent un rôle fondamental dans la conception des bases de données, mais ils sont souvent négligés., Une bonne compréhension et une utilisation précise des types de données garantissent la nature et la longueur correctes des données dans les tableaux. L’intention de cette astuce est de vous aider à comprendre les caractéristiques de base et les fonctionnalités de SQL Server varchar ainsi que ses aspects de performance et de stockage dans SQL Server. Nous avons également couvert les avancées récentes dans SQL varchar dans L’aperçu SQL Server 2019.

Voir aussi

Vous pouvez consulter ces autres articles pour continuer votre apprentissage sur les types de données SQL.,

  • Comprendre le GUID type de données dans SQL Server
  • des types de données Spatiales dans SQL Server
  • Auteur
  • Derniers Posts
Gauri est un spécialiste de SQL Server et a+ de 6 ans d’expérience de travail avec des multinationales de consultation et de la technologie des organisations. Elle est très passionnée par le travail sur des sujets SQL Server comme Azure SQL Database, SQL Server Reporting Services, R, Python, Power BI, Database engine, etc., Elle a des années d’expérience dans la documentation technique et aime la création de technologies.
elle a une expérience approfondie dans la conception de solutions de données et d’analyse et en assure la stabilité, la fiabilité et les performances. Elle est également certifiée en SQL Server et a passé des certifications comme 70-463: implémentation D’entrepôts de données avec Microsoft SQL Server.,
Afficher tous les articles par Gauri Mahajan

Derniers messages par Gauri Mahajan (voir tous)
  • Explorez Azure Services d’Analyse du Modèle et des Données – le 4 février 2021
  • prise en main grâce à Azure Services d’Analyse – janvier 13, 2021
  • Connexion d’Azur Databricks données à Power BI de Bureau – 1er juin 2020

Laisser un commentaire

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