Dans plusieurs cours, livres et emplois, j'ai vu des champs de texte définis comme VARCHAR (255) comme une sorte de texte par défaut pour le texte "court". Y a-t-il une bonne raison pour laquelle une longueur de 255 est choisie si souvent, autre que d'être un joli nombre rond ? S'agit-il d'un retard d'un certain temps dans le passé où il y avait une bonne raison (que cela s'applique ou non aujourd'hui)?
Je me rends compte, bien sûr, qu'une limite plus serrée serait plus idéale, si vous connaissez d'une manière ou d'une autre la longueur maximale de la corde. Mais si vous utilisez VARCHAR (255), cela indique probablement que vous ne connaissez pas la longueur maximale, seulement qu'il s'agit d'une chaîne "courte".
Remarque: j'ai trouvé cette question ( varchar (255) v tinyblob v tinytext ), qui dit 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, car vous ne sauveriez que deux octets par rapport à VARCHAR (256), et vous pourriez tout aussi facilement enregistrer deux autres octets en le déclarant VARCHAR (253).
255 est utilisé car il s'agit du plus grand nombre de caractères pouvant être compté avec un nombre de 8 bits. Il maximise l'utilisation du décompte de 8 bits, sans nécessiter de manière frivole un autre octet entier pour compter les caractères au-dessus de 255.
Lorsqu'il est utilisé de cette façon, VarChar utilise uniquement le nombre d'octets + 1 pour stocker votre texte, vous pouvez donc le définir sur 255, à moins que vous ne souhaitiez une limite stricte (comme 50) sur le nombre de caractères dans le champ.
la source
utf8
,varchar(85)
est la limite sur laquelle le croisement fait basculer l' octet de longueur de un à deux octets. Si c'estutf8mb4
, c'estvarchar(63)
. Celles-ci sont importantes car elles représentent le maximum auquel la longueur d' un VARCHAR peut être étendue grâce à l'utilisation d'ALTER TABLE en ligne . Par conséquent, j'ai dérivé ces nombres en créant un tableau avec unevarchar(2) charset utf8
colonne et en voyant jusqu'où je pouvais l'étendreALGORITHM=INPLACE
.Probablement parce que SQL Server et Sybase (pour n'en nommer que deux que je connais bien) avaient un maximum de 255 caractères dans le nombre de caractères dans une
VARCHAR
colonne. Pour SQL Server, cela a changé dans la version 7 en 1996/1997 environ ... mais les vieilles habitudes meurent parfois dur.la source
Je vais répondre à la question littérale: non , il n'y a pas une bonne raison pour laquelle vous voyez VARCHAR (255) utilisé si souvent (il y a en effet des raisons , comme discuté dans les autres réponses, mais pas de bonnes). Vous ne trouverez pas beaucoup d'exemples de projets qui ont échoué de manière catastrophique parce que l'architecte a choisi VARCHAR (300) au lieu de VARCHAR (255). Ce serait une question d'insignifiance quasi totale même si vous parliez de CHAR au lieu de VARCHAR.
la source
Quand vous dites que
2^8
vous obtenez256
, mais les nombres en termes informatiques commencent à partir du nombre0
. Donc, alors vous avez le255
, vous pouvez le sonder dans un masque Internet pour l'IP ou dans l'IP elle-même.255
est la valeur maximale d'un entier de 8 bits:11111111 = 255
Est ce que ça aide?
la source
Non, vous n'économisez 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 terminé. 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.
la source
VARCHAR
cette façon va à l'encontre de l' intérêt d'utiliserVARCHAR
au lieu deCHAR
.Un nombre de 1 octet non signé peut contenir la plage [0-255] incluse. Donc, quand vous voyez 255, c'est surtout parce que les programmeurs pensent en base
10
(obtenez la blague?) :)En fait, pendant un certain temps, 255 était la plus grande taille que vous pouviez donner à un VARCHAR dans MySQL, et il y a des avantages à utiliser VARCHAR sur TEXT avec l'indexation et d'autres problèmes.
la source
Dans de nombreuses applications, comme MsOffice (jusqu'à la version 2000 ou 2002), le nombre maximum de caractères par cellule était de 255. Déplacer des données depuis des 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.
la source
0000 0000 -> c'est un nombre binaire de 8 bits. Un chiffre représente un peu.
Vous comptez comme ça:
0000 0000 → (0)
0000 0001 → (1)
0000 0010 → (2)
0000 0011 → (3)
Chaque bit peut être l'une des deux valeurs suivantes: activé ou désactivé. Le nombre total le plus élevé peut être représenté par multiplication:
Ou
Nous soustrayons un car le premier nombre est 0.
255 peut contenir un peu (sans jeu de mots) de valeurs.
Au fur et à mesure que nous utilisons plus de bits, la valeur maximale augmente de manière exponentielle. Par conséquent, à de nombreuses fins, ajouter plus de bits est excessif.
la source
Une autre raison peut être que dans les très anciennes bibliothèques d'accès aux données sous Windows telles que RDO et ADO (version COM et non ADO.NET), vous deviez appeler une méthode spéciale, GetChunk, pour obtenir des données à partir d'une colonne de plus de 255 caractères. Si vous avez limité une colonne varchar à 255, ce code supplémentaire n'était pas nécessaire.
la source