Quelle est la taille Max de MySQL VARCHAR?

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

j'ai lu que la taille maximale est limitée par la taille de la rangée qui est d'environ 65k. J'ai essayé de mettre le champ varchar(20000) mais ça dit que c'est trop grand.

je peux mettre varchar(10000) . Quel est le max exact que je peux régler?

236
demandé sur Eric Leschinski 2012-11-22 10:13:36

8 réponses

gardez à l'esprit que MySQL a une limite de taille de rangée maximale

la représentation interne D'une table MySQL a une limite de taille de ligne maximale de 65.535 octets, sans compter les blobs et les types de texte. Les blocs et les colonnes de texte ne contribuent que de 9 à 12 octets à la limite de taille de la rangée parce que leur contenu est stocké séparément du reste de la rangée. Pour en savoir plus sur les limites relatives au nombre de colonnes et à la taille des lignes, consultez le tableau.

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

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 effective D'un VARCHAR dans MySQL 5.0.3 et plus est sujette à la taille maximale de la rangée (65 535 octets, qui est partagé entre toutes les colonnes) et le jeu de caractères utilisé.

cependant, notez que la limite est plus basse si vous utilisez un jeu de caractères de plusieurs octets comme utf8 ou utf8mb4.

utilisez TEXT types pour surmonter la limite de taille de la rangée.

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

plus de détails sur les types de BLOB et de texte

encore plus

vérifier plus de détails sur Data Type Storage Requirements qui traite des exigences de stockage pour tous les types de données.

236
répondu rajukoyilandy 2017-07-23 11:26:15

comme pour les documents en ligne , Il ya une limite de 64K lignes et vous pouvez calculer la taille des lignes 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 les longueurs de colonne ne sont pas une cartographie un-à-un de leur taille. Par exemple, CHAR(10) CHARACTER SET utf8 nécessite trois octets pour chacun des dix caractères puisque ce codage particulier doit tenir compte de la propriété de trois octets par caractère de utf8 (c'est-à-dire MySQL utf8 l'encodage plutôt que de "vrais" UTF-8, qui peut avoir jusqu'à quatre octets).

mais, si la taille de votre rangée approche 64K, vous pouvez vouloir 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 établie (3NF) - c'est possible, juste pas très commun.

si vous voulez utiliser plus que cela, vous pouvez utiliser les types BLOB ou TEXT . Ces derniers ne comptent pas contre la limite de 64K de la ligne (autre qu'une petite empreinte administrative) mais vous devez être conscient d'autres problèmes qui viennent de leur utilisation, comme ne pas être en mesure 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), forcer les tables temporaires à être sur le disque plutôt que dans la mémoire, ou avoir à configurer les tampons comms du client et du serveur pour gérer les tailles efficacement.

les dimensions 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 encore l'inadéquation octet/caractère (de sorte qu'une colonne MEDIUMTEXT utf8 peut stocker" seulement "environ" un demi-million de caractères, (16M-1)/3 = 5,592,405 ) mais il élargit encore considérablement votre gamme.

52
répondu paxdiablo 2015-09-08 05:43:51

Source

la longueur maximale d'un varchar est soumise à la taille de la ligne max en MySQL, qui est de 64KB (sans compter les BLOBs):

VARCHAR (65535) cependant, notez que la limite est plus basse si vous utilisez un jeu de caractères de plusieurs octets:

VARCHAR (21844) jeu de caractères utf8

30
répondu Attila 2017-05-23 11:54:57

De la documentation de MySQL:

la longueur maximale effective D'un VARCHAR dans MySQL 5.0.3 et plus tard est sujet à la taille maximale de la ligne (65,535 octets, qui est partagée entre toutes les colonnes) et le jeu de caractères utilisé. Par exemple, les caractères utf8 peut exiger jusqu'à trois octets par caractère, ainsi une colonne VARCHAR que utilise le jeu de caractères utf8 peut être déclarée un maximum de 21,844 caractère.

Les limites pour le VARCHAR varient selon le jeu de caractères utilisé. Utiliser ASCII utiliserait 1 octet par caractère. Ce qui signifie que vous pouvez stocker 65 535 caractères. L'utilisation de utf8 utilisera 3 octets par caractère résultant en une limite de caractères de 21 844. Mais si vous utilisez le charset multibyte moderne utf8mb4 que vous devriez utiliser! Il supporte les emojis et autres personnages spéciaux. Il utilisera 4 octets par caractère. Cela limitera le nombre de caractères par tableau à 16 383. Notez que D'autres champs tels que INT will sont également comptés dans ces limites.

Conclusion:

utf8 maximum de 21,844 caractères

utf8mb4 maximum de 16,383 caractères

9
répondu Firze 2016-06-09 08:51:52

vous pouvez également utiliser MEDIUMBLOB / LONGBLOB ou Medium text /LONGTEXT

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

5
répondu SRIRAM 2012-11-22 06:18:16

avant Mysql version 5.0.3 Varchar datatype peut stocker 255 caractères, mais à partir de 5.0.3 il peut être stocker 65.535 caractères.

mais il a une limite de taille de ligne maximale de 65,535 octets. Cela signifie qu'en incluant toutes les colonnes il ne doit pas y avoir plus de 65.535 octets.

dans votre cas, il se peut que lorsque vous essayez de définir plus de 10000 il dépasse 65535 et mysql donnera l'erreur.

pour plus information: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

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

2
répondu Suresh Kamrushi 2015-07-07 07:15:13

MySQL VARCHAR max size is 65,535 bytes. Il peut être stocker 65,535 caractères.

-3
répondu Kamrul Hasan 2017-03-20 06:51:51

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

-5
répondu mvp 2012-11-22 06:15:39