web-dev-qa-db-fra.com

Pourquoi devrais-je choisir une autre longueur que 255 pour varchar dans MySQL?

Je connais la différence entre CHAR et VARCHAR,

CHAR - Longueur fixe

VARCHAR - Longueur variable (taille + 1 octet)

Mais je voulais savoir quel était l’objet de pouvoir choisir une longueur de varchar, par exemple. VARCHAR(50), VARCHAR(100), VARCHAR(255)

Cela me semble inutile, car l’espace utilisé dépend de la valeur stockée dans la base de données.

Donc mes questions sont:

1) Il est correct de régler tous mes varchar sur 255 2) Pourquoi voudriez-vous spécifier une autre longueur?

35
Lizard

1) Si vous ne voulez pas limiter la taille maximale d'un varchar stocké, alors c'est bien. Cela étant dit...

2) Dans de nombreux cas, vous souhaitez définir une limite supérieure pour la taille d'un varchar. Disons que vous stockez une liste de diffusion et disposez d'un espace limité pour une ligne d'adresse. En définissant une limite supérieure pour votre champ d'adresse, vous autorisez désormais la base de données à appliquer une longueur de ligne d'adresse maximale pour vous.

21
MarkD

Extrait de la documentation MySQL :

Les types CHAR et VARCHAR sont similaires, mais diffèrent par la façon dont ils sont stockés et récupérés. Depuis MySQL 5.0.3, ils diffèrent également par leur longueur maximale et par le fait de conserver ou non les espaces en fin de chaîne.

Les types CHAR et VARCHAR sont déclarés avec une longueur indiquant le nombre maximal de caractères que vous souhaitez stocker. Par exemple, CHAR (30) peut contenir jusqu'à 30 caractères.

La longueur d'une colonne CHAR est fixée à la longueur que vous déclarez lorsque vous créez la table. La longueur peut être comprise entre 0 et 255. Lorsque les valeurs CHAR sont stockées, elles sont complétées à droite avec des espaces à la longueur spécifiée. Lorsque les valeurs CHAR sont récupérées, les espaces de fin sont supprimés.

Les valeurs dans les colonnes VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée avec une valeur comprise entre 0 et 255 avant MySQL 5.0.3 et entre 0 et 65 535 dans les versions 5.0.3 et ultérieures. La longueur maximale effective d'un VARCHAR dans MySQL 5.0.3 et versions ultérieures dépend de la taille maximale de la ligne (65 535 octets, qui est partagée entre toutes les colonnes) et du jeu de caractères utilisé.

Contrairement à CHAR, les valeurs VARCHAR sont stockées sous forme de préfixe de longueur à un octet ou à deux octets plus les données. Le préfixe de longueur indique le nombre d'octets dans la valeur. Une colonne utilise un octet de longueur si les valeurs ne nécessitent pas plus de 255 octets, mais deux octets de longueur si les valeurs peuvent nécessiter plus de 255 octets.

19
Jauzsika

CHAR Vs VARCHAR

CHAR est utilisé pour la variable de taille de longueur fixe.
VARCHAR est utilisé pour Variable Length Size Variable. 

Par exemple.

create table emp
(f_name CHAR(20),
 l_name VARCHAR(20)
);

insert into emp values('Suraj','Chandak');

select length(f_name), length(l_name) from emp;

Output will be

length(f_name)          Length(l_name)
   20                       7

La meilleure réponse pour CHAR vs VARCHAR

Modifier 

  • Vous pouvez définir la limite supérieure maximale pour la colonne.
  • Les performances et le stockage peuvent avoir un effet.

Merci.

4
Aniket Kulkarni

Les tables de longueur fixe (statique) sont plus rapides. Lorsque chaque colonne d'un tableau est de “longueur fixe”, le tableau est également considéré comme “statique” ou “longueur fixe”. Des exemples de types de colonne qui ne sont PAS de longueur fixe sont: VARCHAR, TEXT, BLOB.

http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

Donc, si votre table ne contient aucun autre champ varchar, text ou blob; vous pouvez utiliser char et rendre votre table statique. De cette façon, ils sont plus rapides.

3
musafar006

1) Techniquement, cela convient, car les champs sont créés avec une longueur de 1 ou 2 octets au début. Ensuite, ils grandiront au besoin.

2) Cela dit, de bons principes de conception vous suggèrent de définir la longueur des champs de manière appropriée. Ainsi, si un utilisateur passe en revue le schéma de table et essaie de calculer la quantité de données stockée dans des champs particuliers, il peut voir que certains champs auront moins données que d'autres et b) vous pouvez éviter de petites tâches supplémentaires effectuées par le moteur de base de données car il doit tronquer moins d'espace à partir d'un champ VARCHAR (10) que VARCHAR (255) lors d'une insertion.

Vous pouvez voir des détails supplémentaires à ce sujet ici:

http://dev.mysql.com/doc/refman/5.0/en/char.html

1
user174624

J'ai lu ailleurs que varchar est livré avec un impact sur les performances relatif à char, lorsque vous exécutez les sélections sur les colonnes définies avec elles. Donc, vous voulez peut-être choisir char, si vous êtes sûr que le champ aura toujours une certaine longueur et que vous avez des problèmes de performances ...

1
Greg Gauthier

La principale différence entre ces deux types de valeur se met en place lors de la comparaison entre des chaînes.

Dans une colonne CHAR dont la longueur est prédéfinie, vous devez "exécuter" tout au long de la longueur de la colonne, tandis que dans la colonne VARCHAR, vous devez "exécuter" entièrement dans la longueur de la valeur est beaucoup plus rapide dans la plupart des cas.

Par conséquent, une longueur de valeur inférieure à la longueur du champ sera comparée plus rapidement si elle est stockée dans un champ VARCHAR.

1
Alon Kogan

Mais je voulais savoir quel était l’objet de pouvoir choisir une longueur de varchar, par exemple. VARCHAR (50), VARCHAR (100), VARCHAR (255)

Cela me semble inutile, car l’espace utilisé dépend de la valeur stockée dans la base de données.

Spécifier par exemple VARCHAR (5) au lieu de VARCHAR (500) peut vous donner de meilleures performances dans certains cas, par exemple. pour les opérations utilisant des tables temporaires en mémoire.

Un autre cas consiste à limiter la longueur de la colonne afin de répondre aux exigences du domaine (lorsque votre valeur ne doit pas dépasser un maximum. Exemple: le nom de domaine complet dans DNS ne doit pas dépasser la longueur de 253 caractères)

0
Grygoriy Gonchar

1) oui.

2) Historiquement, c'était un succès.

Examinez des bases de données telles que sqlite qui stockent tout sous forme de texte afin de prouver que cela n'a plus vraiment d'importance.

0
Toby Allen