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

je sais que la differnce entre CHAR et VARCHAR,

CHAR - longueur Fixe

VARCHAR - longueur Variable (taille + 1 octet)

mais je voulais savoir quel était le but de l'option d'une longueur varchar par exemple VARCHAR(50),VARCHAR(100),VARCHAR(255)

cela me semble inutile car l'espace réel utilisé dépend de la valeur stockée dans la base de données.

Donc mes questions sont:

1) c'est c'est bien de mettre tous mes varchars à 255. 2) Pourquoi voudriez-vous spécifier une autre longueur?

33
demandé sur Martin Thoma 2010-07-02 01:00:15

9 réponses

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

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

21
répondu MarkD 2010-07-01 21:05:26

extrait du MySQL documentation:

les types CHAR et VARCHAR sont similaires, mais diffèrent dans la façon dont ils sont stockés et récupérés. À partir de MySQL 5.0.3, ils diffèrent aussi par la longueur maximale et par le fait que les espaces de fuite sont retenus ou non.

les types CHAR et VARCHAR sont déclarés avec une longueur qui indique le nombre maximum de caractères que vous voulez stocker. Par exemple, CHAR(30) peut contenir jusqu'à 30 caractères.

La longueur d'un La colonne CHAR est fixée à la longueur que vous déclarez lorsque vous créez la table. La longueur peut être n'importe quelle valeur de 0 à 255. Lorsque les valeurs de CHAR sont stockées, elles sont garnies à droite avec des espaces à la longueur spécifiée. Lorsque les valeurs de CHAR sont récupérées, les espaces de fuite sont supprimés.

les valeurs dans les colonnes de VARCHAR sont des chaînes de longueur variable. La longueur peut être spécifiée comme une valeur de 0 à 255 avant MySQL 5.0.3, et de 0 à 65.535 dans les versions 5.0.3 et suivantes. La longueur maximale réelle d'un VARCHAR in MySQL 5.0.3 and later est soumis à la taille maximale de la ligne (65.535 octets, qui est partagée entre toutes les colonnes) et le jeu de caractères utilisé.

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

19
répondu Jauzsika 2010-07-01 21:09:46

CHAR Vs VARCHAR

CHAR est utilisé pour la Variable de taille de longueur fixe.

VARCHAR est utilisé pour la Variable Longueur Taille.

E. G.

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 maximale supérieure de la colonne.
  • la Performance et le stockage peuvent avoir un effet.

Merci.

4
répondu Aniket Kulkarni 2017-05-23 11:58:56

tableaux de longueur fixe (statique) sont plus Rapides. Lorsque chaque colonne d'un tableau est "de longueur fixe", le tableau est également considéré "statique" ou "de longueur fixe". Voici des exemples de types de colonnes qui ne sont pas de longueur fixe: VARCHAR, TEXT, BLOB.

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

Donc, si votre table n'a pas d'autres champs de type varchar, text ou blob; vous pouvez utiliser char et faire de votre table un statique. De cette manière, ils sont plus rapides.

3
répondu musafar006 2013-11-22 06:45:39

1) Techniquement, c'est bien, parce que les champs sont créés avec seulement 1 ou 2 octets de longueur au début. Après, ils pousseront autant que nécessaire.

2) Cela dit, de bons principes de conception suggèrent que vous définissez les longueurs de champ de façon appropriée a) Si quelqu'un passe par le schéma de table et essaie de déterminer combien de données sont stockées dans des champs particuliers, ils peuvent voir que certains champs contiennent moins de données que d'autres et b) vous pouvez empêcher de petites quantités de travail supplémentaire fait par le moteur de base de données car il doit tronquer moins d'espace d'un champ VARCHAR(10) qu'un VARCHAR(255) lors d'une insertion.

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

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

1
répondu 2010-07-01 21:06:22

j'ai lu ailleurs que varchar est livré avec un succès de performance relatif à char, quand vous exécutez selects contre les colonnes définies avec eux. Alors, peut-être vous voulez choisir char, si vous savez que le terrain sera toujours une certaine longueur, et vous avez des problèmes de performances...

1
répondu Greg Gauthier 2010-07-01 21:08:52

la principale différence entre ces deux types de valeurs se met en place lors d'une comparaison entre des chaînes.

dans une colonne CHAR dont la longueur est prédéfinie, vous devrez "exécuter" tout au long de la longueur de la colonne, tandis que dans la colonne VARCHAR vous devrez "exécuter" tout au long de la longueur de la valeur et non la longueur de la colonne, ce qui est beaucoup plus rapide dans la plupart des cas.

par conséquent une longueur de valeur plus petite que la longueur de champ sera comparée plus rapidement si stocké dans un champ VARCHAR.

1
répondu Alon Kogan 2013-05-19 07:58:38

1) Oui.

2) historiquement, c'était un succès de performance.

regardez les bases de données telles que sqlite qui stockent tout comme du texte pour prouver que cela n'a plus vraiment d'importance.

0
répondu Toby Allen 2010-07-01 23:40:31

Mais je voulais savoir quelle était la purpse de l'avoir l'option pour un varchar longueur par exemple de type VARCHAR(50), VARCHAR(100), VARCHAR(255)

cela me semble inutile car l'espace réel 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 des opérations qui utilisent des tables temporaires en mémoire.

une autre affaire est de limitez la longueur de la colonne pour compléter les exigences de domaine (lorsque votre valeur ne devrait pas être supérieure à un certain maximum. Exemple: nom de domaine complet dans le DNS ne peut pas dépasser la longueur de 253 caractères)

0
répondu Grygoriy Gonchar 2013-08-09 19:47:57