On voit souvent des champs de base de données définis pour avoir une magnitude de 255 caractères. Quelle est la raison traditionnelle / historique de ce choix ? Je suppose que c'est lié à la pagination, aux limites de mémoire et aux performances, mais la distinction entre 255 et 256 m'a toujours dérouté.
varchar(255)
Considérant qu'il s'agit d'une capacité ou d'une magnitude, pas un indexeur , pourquoi le 255 est préféré au 256 ? Un octet est-il réservé à un usage quelconque (terminateur ou null ou autre) ?
On peut supposer que varchar(0) est un non-sens (a une capacité nulle) ? Dans ce cas, 2^8 de l'espace devrait être 256 sûrement ?
Y a-t-il d'autres magnitudes qui offrent des avantages en matière de performance ? Par exemple, varchar(512) est-il moins performant que varchar(511) ou varchar(510) ?
Cette valeur est-elle la même pour toutes les bases de données de relations, anciennes et nouvelles ?
clause de non-responsabilité - Je suis un développeur, pas un DBA. J'utilise les tailles et les types de champs qui conviennent à ma logique d'entreprise lorsque celle-ci est connue, mais j'aimerais connaître le nom de l'entreprise. historique la raison de cette préférence, même si elle n'est plus pertinente (mais encore plus si elle l'est toujours).
Editar:
Merci pour les réponses, il semble y avoir un certain consensus sur le fait qu'un octet est utilisé pour stocker la taille, mais cela ne règle pas définitivement la question dans mon esprit.
Si les métadonnées (longueur de la chaîne de caractères) sont stockées dans la même mémoire/disque contigu, cela a un certain sens. Un octet de métadonnées et 255 octets de données de chaîne de caractères se complèteraient très bien et tiendraient dans 256 octets contigus de mémoire, ce qui est sans doute bien ordonné.
Mais... Si les métadonnées (longueur de la chaîne) sont stockées séparément des données réelles de la chaîne (dans une table principale peut-être), alors limiter la longueur des données de la chaîne par un octet, juste parce qu'il est plus facile de stocker seulement un entier d'un octet de métadonnées semble un peu étrange.
Dans les deux cas, il s'agit d'une subtilité qui dépend probablement de l'implémentation de la BD. La pratique de l'utilisation de 255 semble assez répandue, donc quelqu'un, quelque part, a dû plaider en sa faveur au début, quelqu'un peut-il se souvenir de ce qu'était/est ce cas ? Les programmeurs n'adoptent pas une nouvelle pratique sans raison, et celle-ci a dû être nouvelle à un moment donné.
6 votes
Parce que le nombre de caractères va de 0 à N-1. Donc 256 caractères seront déclarés varchar(255). Sauf erreur de ma part.
4 votes
Peut-être parce que les informaticiens commencent à compter avec 0, et non 1 ;) ?
0 votes
Je pense que ça a à voir avec les programmeurs de la vieille école, je ne me souviens même pas pourquoi nous l'avons fait.
10 votes
@Elite Gentleman : nope le nombre entre parenthèses est la vraie longueur.... Comme dans les déclarations de tableaux en C : x[256] donne x[0]...x[255].
0 votes
@romaintaz - mais considérez un tableau qui peut stocker 1 élément. Vous le déclarez quelque chose[1] et vous y accédez quelque chose[0]. La question est de savoir pourquoi, en SQL, nous déclarons que la capacité est inférieure d'un octet à ce qui semble logique à première vue.
0 votes
Duplicata possible de Y a-t-il une bonne raison pour laquelle je vois VARCHAR(255) utilisé si souvent (plutôt qu'une autre longueur) ?