web-dev-qa-db-fra.com

Existe-t-il une bonne raison pour que je vois VARCHAR (255) utilisé si souvent (par opposition à une autre longueur)?

Dans plusieurs cours, livres et travaux, j'ai constaté que les champs de texte définis en tant que VARCHAR (255) étaient en quelque sorte le type par défaut du texte "shortish". Y at-il une bonne raison qu’une longueur de 255 soit choisie si souvent, si ce n’est n chiffre rond de Nice ? S'agit-il d'un passé ancien où il y avait une bonne raison (que cela s'applique ou non aujourd'hui)?

Bien sûr, je me rends compte qu’une limite plus serrée serait plus idéale si vous connaissez en quelque sorte la longueur maximale de la chaîne. Mais si vous utilisez VARCHAR (255), cela indique probablement que vous ne connaissez pas la longueur maximale, mais il s'agit simplement d'une chaîne "shortish".


Remarque: j'ai trouvé cette question ( varchar (255) v tinyblob v tinytext ), qui indique que VARCHAR ( n ) requiert n + 1 octet de stockage pour n <= 255, n + 2 octets de stockage pour n > 255. Est-ce la seule raison? Cela semble un peu arbitraire, puisque vous ne sauvegarderiez que deux octets par rapport à VARCHAR (256) et que vous pourriez tout aussi facilement sauvegarder deux autres octets en le déclarant VARCHAR (253).

130
Kip

Historiquement, 255 caractères ont souvent été la longueur maximale d'un VARCHAR dans certains SGBD, et il peut parfois arriver que le maximum effectif soit utilisé si vous souhaitez utiliser UTF-8 et que la colonne soit indexée (en raison de la longueur de l'index). limites).

84
chaos

255 est utilisé parce que c'est le plus grand nombre de caractères pouvant être comptés avec un nombre de 8 bits. Il maximise l’utilisation du nombre de 8 bits, sans exiger de manière frivole un autre octet entier pour compter les caractères supérieurs à 255.

Lorsqu'il est utilisé de cette manière, VarChar utilise uniquement le nombre d'octets + 1 pour stocker votre texte. Vous pouvez donc également le définir sur 255, sauf si vous souhaitez une limite stricte (telle que 50) sur le nombre de caractères du champ.

143
Robert Harvey

Probablement parce que SQL Server et Sybase (pour en nommer deux que je connais bien) avaient un maximum de 255 caractères dans le nombre de caractères d'une colonne VARCHAR. Pour SQL Server, cela a changé dans la version 7 en 1996/1997 ou à peu près ... mais les vieilles habitudes ont parfois la vie dure.

19
Charles Bretana

Je vais répondre à la question littérale: non, il n’ya pas de bonne raison que VARCHAR (255) soit utilisé aussi souvent (il existe en effet des raisons , comme indiqué dans les autres réponses, mais pas les bonnes). Vous ne trouverez pas beaucoup d'exemples de projets ayant échoué de manière catastrophique car l'architecte a choisi VARCHAR (300) au lieu de VARCHAR (255). Ce serait un problème d'insignifiance presque totale, même si vous parliez de CHAR au lieu de VARCHAR.

15
MusiGenesis

Quand tu dis 2^8 vous recevez 256, mais les nombres en termes d’ordinateurs commencent par le nombre 0. Alors, alors vous avez le 255, vous pouvez le rechercher dans un masque Internet pour l’IP ou dans l’IP même.

255 est la valeur maximale d’un entier de 8 bits: 11111111 = 255

Est ce que ça aide?

11
exec.-

Remarque: j'ai trouvé cette question (varchar (255) v tinyblob v tinytext), qui indique que VARCHAR (n) nécessite n + 1 octets de stockage pour n <= 255, n + 2 octets de stockage pour n> 255. Est-ce la seule raison? Cela semble un peu arbitraire, puisque vous ne sauvegarderiez que deux octets par rapport à VARCHAR (256) et que vous pourriez tout aussi facilement sauvegarder deux autres octets en le déclarant VARCHAR (253).

Non, vous ne sauvegardez pas deux octets en déclarant 253. L'implémentation de varchar est très probablement un compteur de longueur et un tableau de longueur variable, non détruit. Cela signifie que si vous stockez "hello" dans un varchar (255), vous occuperez 6 octets: un octet pour la longueur (le nombre 5) et 5 octets pour les cinq lettres.

7
Stefano Borini

Un numéro d'octet non signé de 1 peut contenir la plage [0-255] incluse. Donc, quand vous voyez 255, c'est principalement parce que les programmeurs pensent en base 10 (obtenez la blague?) :)

En fait, pendant un certain temps, 255 était la taille la plus grande que vous puissiez attribuer à VARCHAR dans MySQL, et l’utilisation de VARCHAR par rapport à TEXT avec des problèmes d’indexation et d’autres avantages présente des avantages.

3
gahooa

Dans de nombreuses applications, comme MsOffice (jusqu'à la version 2000 ou 2002), le nombre maximal de caractères par cellule était de 255. Déplacer des données de programmes capables de gérer plus de 255 caractères par champ vers/depuis ces applications était un cauchemar. Actuellement, la limite est de moins en moins gênante.

3
Joaquin Montes

Une autre raison peut être que dans de très anciennes bibliothèques d'accès aux données sous Windows, telles que RDO et ADO (version COM non ADO.NET), vous deviez appeler une méthode spéciale, GetChunk, pour obtenir les données d'un colonne avec plus de 255 caractères Si vous limitez une colonne varchar à 255, ce code supplémentaire n'est pas nécessaire.

0
Booji Boy