Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quoi de neuf pour no more varchar(255)

À quelle "règle VARCHAR(255)" faites-vous référence ?

Chaque fournisseur de base de données est libre d'implémenter VARCHAR comme il le souhaite. Les règles (et directives) pour VARCHAR ne seront pas nécessairement les mêmes pour toutes les bases de données.

En ce qui concerne le standard SQL, je ne l'ai pas vraiment étudié. Cela peut être assez lâche, donc toutes les implémentations VARCHAR sont toutes conformes à la norme. Si la norme SQL pour VARCHAR est vraiment stricte, les fournisseurs de SGBD peuvent soit étendre la norme, soit simplement ne pas être conformes. Je ne pense pas que la norme réelle importe beaucoup. Ce qui compte, ce sont les règles réelles appliquées par le SGBD.

En règle générale, spécifiez une longueur VARCHAR suffisamment longue pour prendre en charge la configuration système requise. Si l'exigence du système est de ne pas autoriser plus de 200 caractères, alors je spécifierais la longueur comme VARCHAR(200) .

Comme autre règle générale, ne définissez pas de longueurs VARCHAR plus grandes que nécessaire. Les colonnes VARCHAR déclarées plus longues que nécessaire peuvent avoir un impact sur les ressources et les performances.

La limite Oracle pour la longueur VARCHAR est de 4 000 caractères. (Dans les versions précédentes d'Oracle, le maximum était de 2000. Si vous avez besoin de plus de 4000 caractères, vous pouvez utiliser CLOB type de données.

Limite SQL Server à VARCHAR(8000) , sauf si vous spécifiez VARCHAR(MAX) qui autorise une taille maximale (en octets) de 2^32-1.

MySQL a une limite de 65 535 pour la limite de longueur de ligne maximale. Cela limite donc efficacement la taille de VARCHAR à VARCHAR (21844), si vous utilisez un jeu de caractères multi-octets comme utf8. Avec un jeu de caractères à un seul octet (comme latin1), le maximum serait VARCHAR(65532). Si vous avez besoin de plus de caractères que cela, ou si vous rencontrez la limite de longueur de ligne maximale, vous pouvez utiliser le type de données TEXT au lieu de VARCHAR.

La plupart des implémentations de SGBD VARCHAR stockent un champ "longueur" pour une colonne VARCHAR, ainsi que la valeur. la longueur est stockée sous forme d'entier.

Dans certains SGBD, si la longueur maximale (en octets) d'une colonne VARCHAR ne dépasse pas 255 octets, le champ de longueur peut être implémenté sous la forme d'un entier à un octet. Si la colonne autorise plus de 255 octets, le champ de longueur doit être supérieur à un seul octet.

Avec les formats de lignes dynamiques, en termes de stockage de lignes, stockant 10 caractères dans une colonne, peu importe si la colonne est définie comme VARCHAR(30) ou VARCHAR(1000). Avec les formats de lignes fixes, l'espace pour la longueur maximale de la colonne sera réservé. Le format des stockages de lignes dépendra du SGBD et, dans certains cas (MySQL), du moteur de stockage et du format de ligne spécifié.

Oui, nous sommes en 2016. Et nous avons parcouru un long chemin depuis l'introduction du premier système de base de données relationnelle commercial.

La base de données n'est qu'une partie du système. Il peut y avoir des limites dans l'application ou d'autres composants logiciels. (Si l'application est écrite en C et que l'application définit une structure avec un tableau d'octets pour le champ, la limite de taille sera importante. L'augmentation de la taille autorisée dans la base de données ne résoudra pas automatiquement l'application .

Il peut également y avoir des limites/restrictions de longueur dans le code Javascript ou dans les éléments HTML d'une page Web. Ou il peut y avoir des limitations d'autres composants logiciels. Par exemple, certains des très anciens pilotes ODBC SQL Server ont une limite de 255 caractères (octets ?) pour les colonnes CHAR et VARCHAR.

Ainsi, la longueur d'un VARCHAR dans la base de données n'est qu'une partie de l'histoire.

Cela dit, je ne comprends toujours pas ce que vous voulez dire, quand vous demandez

Pouvons-nous enfreindre la règle VARCHAR(255) ?

Je me demande à quelle "règle" vous faites référence. Dans la plupart des bases de données que je connais, il est possible de définir des colonnes VARCHAR bien plus longues que 255 octets ou 255 caractères. Et faire cela n'enfreint aucune règle.