Question

Quel est l'inconvénient de choisir une valeur élevée pour max lors de la création d'une colonne varchar ou varbinary?

J'utilise MS SQL mais je suppose que cela pourrait également s'appliquer aux autres dbs.

Merci

Était-ce utile?

La solution

Cela dépend de la question de savoir s'il est raisonnable de stocker une grande quantité de données dans la colonne en question.

Si vous déclarez une colonne qui ne stockerait jamais correctement beaucoup de données (c'est-à-dire un prénom d'employé sous la forme VARCHAR (1000)), vous vous retrouverez avec une variété de problèmes

  1. Beaucoup, sinon la plupart des API clientes (pilotes ODBC, pilotes JDBC, etc.) allouent sur le client des mémoires tampons suffisamment grandes pour stocker la taille maximale d'une colonne particulière. Ainsi, même si la base de données ne doit stocker que les données réelles, vous pouvez augmenter considérablement la quantité de mémoire utilisée par l'application cliente.
  2. Vous ne pouvez plus gérer les règles de validation des données (ou transmettre des informations sur les données) à partir de la définition de la table. Si la base de données autorise des prénoms de 1 000 caractères, chaque application qui interagit avec la base de données se verra probablement attribuer ses propres règles concernant la taille maximale d'un nom d'employé. Si cela n'est pas atténué en plaçant une couche de procédure stockée entre toutes les applications et les tables, cela conduit généralement plusieurs applications à différentes règles.
  3. La loi de Murphy stipule que si vous autorisez 1 000 caractères, quelqu'un stockera éventuellement 1 000 caractères dans la colonne, ou au moins une valeur suffisamment grande pour provoquer des erreurs dans une ou plusieurs applications (par exemple, personne ne vérifie si le nom d'employé de chaque application le champ peut afficher 1000 caractères).

Autres conseils

Dépend du SGBDR. IIRC, MySql alloue une surcharge de 2 octets à varchars & Gt; 255 caractères (pour suivre la longueur de varchar). MSSQL & Lt; = 2000 vous permettrait d’attribuer une taille de ligne & Gt; 8060 octets, mais cela échouerait si vous tentiez d'insérer ou de mettre à jour une ligne dépassant 8060 octets. SQL 2005 [1] autorise l’insertion, mais alloue une nouvelle page pour le débordement et laisse un pointeur derrière. Cela a évidemment un impact sur les performances.

[1] varchar (max) est un cas particulier, mais allouera également une page de dépassement de capacité si la longueur du champ est > 8000 ou la ligne & Gt; 8060. C’est avec les valeurs par défaut de MSSQL et le comportement peut changer avec l’option Types de grande taille dans la ligne de données.

Vous pourriez ajouter le risque de casser votre application si des données volumineuses arrivaient d'une manière ou d'une autre (comme à partir d'une interface externe) et si votre application n'était pas conçue pour le gérer.

Pour une bonne conception, vous devez toujours limiter la taille des champs à une valeur réaliste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top