37 votes

Pourquoi devrais-je 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 quelle était la purpse de l'avoir l'option pour un varchar longueur par exemple, VARCHAR(50), VARCHAR(100), VARCHAR(255)

Cela semble inutile pour moi parce que l'espace réellement utilisé dépend de la valeur stockée dans la base de données.

Donc mes questions sont:

1) Il est bon de définir tous mes varchar est à 255 2) Pourquoi voudriez-vous de spécifier toute autre longueur?

21voto

MarkD Points 1773

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.

19voto

Jauzsika Points 1556

Extrait de la documentation de MySQL:

Les types CHAR et VARCHAR sont similaires, mais diffèrent dans la façon dont ils sont stockés et récupérés. Depuis MySQL 5.0.3, ils diffèrent aussi dans la longueur maximale et dans la si les les espaces sont conservés.

Les types CHAR et VARCHAR sont déclarées avec une longueur qui indique 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 fixe pour la durée que vous déclarez lorsque vous créez la table. La longueur peut être n'importe quelle valeur de 0 à 255. Lors de CHAR, les valeurs sont stockées, elles sont complétées par des espaces à la longueur spécifiée. Lorsque CHAR les valeurs sont récupérées, les espaces sont supprimés.

Les valeurs dans des colonnes VARCHAR sont des chaînes de longueur variable. La longueur peut être défini comme une valeur de 0 à 255 avant MySQL 5.0.3, et de 0 à 65 535 en 5.0.3 et les versions ultérieures. La longueur maximale réelle d'un VARCHAR dans MySQL 5.0.3 et, plus tard, est soumise à la taille maximale de ligne (65 535 octets, qui est partagé entre toutes les colonnes) et le jeu de caractères utilisé.

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

4voto

Aniket Kulkarni Points 3743

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.

3voto

seventy6ix Points 48

De longueur fixe (Statique) les Tables sont plus Rapides. Lors de chaque colonne d'une table est "de longueur fixe", le tableau est également considéré comme "statique" ou "de longueur fixe". Des exemples de types de colonnes 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 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.

1voto

fortheworld Points 756

1) Techniquement, c'est bien, parce que les champs sont créés avec seulement 1 ou 2 octets de longueur au début. Par la suite, ils vont grandir en tant que de besoin.

2) cela étant dit, les bons principes de conception vous suggérons de définir les longueurs de champ de manière appropriée de sorte a) Si quelqu'un passe par le schéma de la table et tente de trouver la quantité de données stockées dans des domaines particuliers, ils peuvent voir que certains champs ne contiennent moins de données que les autres, et b) vous pouvez empêcher les petites quantités de travail supplémentaire accompli par le moteur de base de données, car il a pour tronquer moins d'espace à partir d'un type VARCHAR(10) champ de type 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X