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?
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.
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.
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.
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.
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:
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...
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) 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.
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)