Je voudrais savoir quelle est la taille maximale d'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 dit que c'est trop grand.
Je pourrais le régler varchar(10000)
. Quel est le maximum exact auquel je peux le régler?
Réponses:
Gardez à l'esprit que MySQL a une limite de taille de ligne maximale
La taille maximale qu'une seule colonne peut occuper est différente avant et après MySQL 5.0.3
Cependant, notez que la limite est inférieure si vous utilisez un jeu de caractères multi-octets comme utf8 ou utf8mb4.
Utilisez des
TEXT
types afin de dépasser la limite de taille de ligne.Plus de détails sur les types BLOB et TEXT
Encore plus
Commander plus de détails sur Type de données Exigences de stockage qui traite des besoins de stockage pour tous les types de données.
la source
Selon les documents en ligne , il y a une limite de 64 Ko et vous pouvez déterminer la taille de la ligne en utilisant:
Vous devez garder à l'esprit que les longueurs de colonne ne sont pas un mappage un à un 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 prendre en compte la propriété de trois octets par caractère deutf8
(c'est l'utf8
encodage de MySQL plutôt que le "vrai" UTF-8, qui peut avoir jusqu'à quatre octets ).Mais, si la taille de votre ligne approche 64 Ko, vous souhaiterez peut-être 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, mais pas très courant.
Si vous souhaitez utiliser plus que cela, vous pouvez utiliser les types
BLOB
ouTEXT
. Ceux-ci ne comptent pas dans la limite de 64 Ko de la ligne (autre qu'une petite empreinte administrative), mais vous devez être conscient des autres problèmes qui découlent de leur utilisation, tels que le fait de ne pas pouvoir trier en utilisant tout le bloc de texte 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 le disque plutôt que dans la mémoire, ou à configurer des tampons de communication client et serveur pour gérer efficacement les tailles.Les tailles autorisées sont:
Vous avez toujours l'inadéquation octet / caractère (de sorte qu'une
MEDIUMTEXT utf8
colonne peut stocker "seulement" environ un demi-million de caractères(16M-1)/3 = 5,592,405
), mais elle étend encore considérablement votre plage.la source
utf8mb4
dans MySQL .utf8mb4
est le nom de MySql pour ce que le reste du mot appelle utf8.La source
la source
CHARACTER SET utf8
dans les exemples. Cela devrait êtreCHARACTER SET utf8mb4
(si vous voulez que tout le texte Unicode soit stocké correctement ... et qui ne veut pas cela?)CHARSET=utf8mb4
utilisationVARCHAR(16383)
.De la documentation MySQL:
Les limites pour le 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. L'utilisation d'utf8 utilise 3 octets par caractère, ce qui donne 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 prend en charge 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:
utf8 maximum 21 844 caractères
utf8mb4 maximum de 16 383 caractères
la source
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 cela, MySQL tronquera les données. MEDIUMBLOB peut stocker jusqu'à 16 777 213 octets et LONGBLOB peut stocker jusqu'à 4 294 967 292 octets.
la source
Avant la version 5.0.3 de Mysql, le type de données Varchar peut stocker 255 caractères, mais à partir de la version 5.0.3, il peut contenir 65 535 caractères.
MAIS il a une limitation de la taille maximale des lignes de 65 535 octets. Cela signifie que, y compris toutes les colonnes, il ne doit 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/en/column-count-limit.html
blog avec exemple: http://goo.gl/Hli6G3
la source
Vous pouvez utiliser le
TEXT
type , qui n'est pas limité à 64 Ko.la source