web-dev-qa-db-fra.com

Quelle est la taille maximale de MySQL VARCHAR?

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

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 régler le champ sur varchar(20000) mais il est dit que c'est trop grand.

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

276
user1832628

N'oubliez pas que MySQL a une limite maximale de taille de ligne

La représentation interne d'une table MySQL a une limite de taille de ligne maximale de 65 535 octets, sans compter les types BLOB et TEXT. Les colonnes BLOB et TEXT ne contribuent que de 9 à 12 octets à la limite de taille de ligne, car leur contenu est stocké séparément du reste de la ligne. En savoir plus sur Limites sur le nombre de colonnes du tableau et la taille des lignes.

La taille maximale qu'une seule colonne peut occuper est différente avant et après MySQL 5.0.3

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 est soumise à la taille de ligne maximale (65 535 octets, qui est partagée entre toutes les colonnes) et au jeu de caractères utilisé.

Toutefois, notez que la limite est inférieure si vous utilisez un jeu de caractères multi-octets tel que utf8 ou utf8mb4.

Utilisez TEXT types afin de dépasser la limite de taille de ligne.

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

Plus de détails sur les types de BLOB et de TEXT

Encore plus

Checkout plus de détails sur Configuration requise pour le stockage du type de données qui traite des exigences de stockage pour tous les types de données.

273
rajukoyilandy

Selon les documents en ligne , il existe une limite de ligne de 64 Ko 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)
_

N'oubliez pas que les longueurs de colonne ne constituent pas un mappage univoque de leur taille. Par exemple, CHAR(10) CHARACTER SET utf8 requiert trois octets pour chacun des dix caractères car ce codage particulier doit prendre en compte la propriété de trois octets par caractère de _utf8_ (c'est MySQL's _utf8_ codage plutôt que "réel" UTF-8, qui peut avoir jusqu'à quatre octets).

Toutefois, si votre taille de ligne est proche de 64 Ko, vous pouvez examiner le schéma de votre base de données. C'est une table rare qui doit être aussi large dans une base de données correctement configurée (3NF) - c'est possible, tout simplement pas très commun.

Si vous voulez utiliser plus que cela, vous pouvez utiliser les types BLOB ou TEXT. Celles-ci ne comptent pas dans la limite de 64 Ko de la ligne (autre qu'une faible empreinte administrative), mais vous devez connaître les autres problèmes liés à leur utilisation, tels que l'impossibilité d'effectuer un tri 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), forçant les tables temporaires à être sur disque plutôt qu'en mémoire, ou devant configurer des mémoires tampons de communication client et 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 décalage octet/caractère (de sorte qu'une colonne _MEDIUMTEXT utf8_ puisse stocker "seulement" environ un demi-million de caractères, _(16M-1)/3 = 5,592,405_), mais élargit néanmoins considérablement votre plage.

56
paxdiablo

Source

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

VARCHAR (65535) Notez cependant que la limite est inférieure si vous utilisez un jeu de caractères multi-octets:

VARCHAR (21844) JEU DE CARACTERES utf8

36
Attila

De la documentation MySQL:

La longueur maximale effective d'un VARCHAR dans MySQL 5.0.3 et versions ultérieures est soumise à la taille de ligne maximale (65 535 octets, qui est partagée entre toutes les colonnes) et au jeu de caractères utilisé. Par exemple, les caractères utf8 peuvent nécessiter jusqu'à trois octets par caractère. Ainsi, une colonne VARCHAR qui utilise le jeu de caractères utf8 peut être déclarée comme comportant au maximum 21 844 caractères.

Les limites de VARCHAR varient en fonction du jeu de caractères utilisé. Utiliser ASCII utiliserait 1 octet par caractère. Cela signifie que vous pouvez stocker 65 535 caractères. Si vous utilisez utf8, vous utiliserez 3 octets par caractère, soit une limite de 21 844 caractères. MAIS si vous utilisez le jeu de caractères multi-octets moderne utf8mb4 que vous devriez utiliser! Il supporte les emojis et autres caractères spéciaux. Il utilisera 4 octets par caractère. Cela limitera le nombre de caractères par table à 16 383. Notez que d'autres champs tels que INT seront également comptés dans ces limites.

Conclusion:

tf8 maximum de 21 844 caractères

tf8mb4 maximum de 16,38 caractères

14
Firze

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

Un type d'objet BLOB dans MySQL peut stocker jusqu'à 65 534 octets. Si vous essayez de stocker plus de données, MySQL tronque les données. MEDIUMBLOB peut stocker jusqu'à 16 777 213 octets et LONGBLOB peut stocker jusqu'à 4 294 967 292 octets.

6
SRIRAM

Avant la version 5.0.3 de Mysql, le type de données Varchar pouvait stocker 255 caractères, mais à partir de la version 5.0.3, il pouvait stocker 65 535 caractères.

MAIS il a une limite de taille de ligne maximale de 65 535 octets. Cela signifie que toutes les colonnes comprises ne doivent pas dépasser 65 535 octets.

Dans votre cas, il est possible que lorsque vous essayez de définir plus de 10000, il dépasse plus de 65 535 et mysql donnera l'erreur.

Pour plus d'informations: https://dev.mysql.com/doc/refman/5.0/fr/column-count-limit.html

blog avec exemple: http://goo.gl/Hli6G

3
Suresh Kamrushi