331 votes

Quelle est la taille maximale des VARCHAR de MySQL ?

Je voudrais savoir quelle est la taille maximale d'un type VARCHAR MySQL.

J'ai lu que la taille maximale est limitée par la taille de la ligne qui est d'environ 65k. J'ai essayé de définir le champ à varchar(20000) mais il dit que c'est trop grand.

Je pourrais le régler sur varchar(10000) . Quel est le maximum exact auquel je peux le régler ?

1 votes

Un blog de détail : goo.gl/Hli6G3

320voto

rajukoyilandy Points 1352

Les valeurs des colonnes 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 5.0.3 et les versions ultérieures. La longueur maximale effective d'un VARCHAR dans MySQL 5.0.3 et les versions ultérieures est soumise à la taille maximale de la ligne (65 535 octets, qui est partagée entre toutes les colonnes) et au jeu de caractères utilisé.

Utilisez TEXT types.

Les quatre types de TEXTE sont TINYTEXT, TEXT, MEDIUMTEXT et LONGTEXT. Ils correspondent aux quatre types de BLOB et ont les mêmes longueurs maximales et exigences de stockage.

Voir les types BLOB et TEXT

6 votes

qu'est-ce qu'une chaîne "longue" ?

10 votes

J'essaie cependant d'éviter les colonnes TEXTE car elles peuvent entraîner la création de tables temporaires lors de la présence et du tri.

1 votes

Si je prends varchar(200) pour le prénom et que je ne stocke que 6 caractères dans ce champ, combien d'octets le prénom occupera-t-il ?

64voto

paxdiablo Points 341644

Conformément à les documents en ligne il y a une limite de 64K lignes et vous pouvez calculer la taille de la ligne en utilisant :

row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)

Vous devez garder à l'esprit que la longueur des colonnes n'est pas une correspondance univoque de leur taille. Par exemple, CHAR(10) CHARACTER SET utf8 nécessite trois octets pour chacun des dix caractères, car cet encodage particulier doit tenir compte de la propriété de trois octets par caractère de l'alphabet numérique. utf8 .

Mais si la taille de vos lignes approche les 64K, vous devriez peut-être examiner le schéma de votre base de données. Il est rare qu'une table ait besoin d'être aussi large dans une base de données correctement configurée (3NF). possible, mais ce n'est pas très courant.

Si vous voulez en utiliser plus, vous pouvez utiliser la fonction BLOB ou TEXT types. Ceux-ci ne comptent pas dans la limite de 64K de la ligne (à part une petite empreinte administrative) mais vous devez être conscient des autres problèmes qui découlent de leur utilisation, tels que l'impossibilité de trier en utilisant le bloc de texte entier au-delà d'un certain nombre de caractères (bien que cela puisse être configuré vers le haut), l'obligation de placer les tables temporaires sur le disque plutôt qu'en mémoire, ou la nécessité de configurer les tampons de communication du client et du serveur pour gérer efficacement les tailles.

Les tailles autorisées sont :

TINYTEXT          255 (+1 byte  overhead)
TEXT          64K - 1 (+2 bytes overhead)
MEDIUMTEXT    16M - 1 (+3 bytes overhead)
LONGTEXT      4G  - 1 (+4 bytes overhead)

Vous avez toujours le problème de la non-concordance octet/caractère (de sorte qu'un MEDIUMTEXT utf8 peut stocker "seulement" environ un demi-million de caractères, (16M-1)/3 = 5,592,405 ) mais cela élargit quand même considérablement votre champ d'action.

4 votes

Gardez à l'esprit que les types TEXT ne peuvent PAS être stockés dans des tables de mémoire, ce qui entraîne une pénalité de performance significative lorsqu'ils sont utilisés alors qu'un VARCHAR suffirait.

0 votes

la propriété de trois octets par caractère de l'utf8 " de MySql utf8 ce qui n'est pas du tout utf8. En réalité, le nombre maximum d'octets dans un caractère utf-8 est 4 . Pour cette raison, vous devez toujours définir l'encodage sur utf8mb4 dans MySQL . utf8mb4 est le nom de MySql pour ce que le reste du monde appelle utf8.

1 votes

@StijndeWitt, merci pour cela. J'ai clarifié pour indiquer que je voulais parler de la méthode d'encodage utf8 de MySQL plutôt que d'UTF-8. J'utilise généralement la variante en majuscules pour indiquer le "vrai" UTF-8 puisque c'est la convention IANA acceptée.

42voto

Attila Bujáki Points 1221

Source :

"La longueur maximale d'un varchar est soumise à la taille maximale des lignes dans MySQL, qui est de 64 Ko (sans compter les BLOB) :

VARCHAR(65535) Notez toutefois que la limite est plus basse si vous utilisez un jeu de caractères à plusieurs octets :

VARCHAR(21844) CHARACTER SET utf8 "

26 votes

Veuillez cesser d'utiliser CHARACTER SET utf8 dans des exemples. Il doit être CHARACTER SET utf8mb4 (si vous voulez tous le texte Unicode est stocké correctement... et qui ne le souhaite pas ?)

4 votes

Pour CHARSET=utf8mb4 utiliser VARCHAR(16383) .

3 votes

L'utilisation de utf8mb4 vous mettra face à la limite de la largeur d'index dans une situation où utf8 ne le fait pas. Si vous examinez les jeux de caractères inclus dans utf8mb4 mais pas dans utf8, vous constaterez que l'inclusion de toutes les formes de hiéroglyphes et autres jeux de caractères obscurs ne vaut pas la peine de subir une pénalité de performance significative (déterminée empiriquement). Ce n'est pas aussi simple que Stijn le laisse entendre.

6voto

SRIRAM Points 955

vous pouvez également utiliser MEDIUMBLOB/LONGBLOB ou MEDIUMTEXT/LONGTEXT

Un type BLOB dans MySQL peut stocker jusqu'à 65 534 octets, si vous essayez de stocker plus que cette quantité de données, MySQL tronquera les données. MEDIUMBLOB peut stocker jusqu'à 16 777 213 octets, et LONGBLOB peut stocker jusqu'à 4 294 967 292 octets.

-8voto

mvp Points 29360

Vous pouvez utiliser TEXT type qui n'est pas limité à 64KB.

35 votes

Cela ne répond pas à la question.

1 votes

Votre réponse n'est pas pertinente pour la question.

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