Longueur maximale pour le texte de type MySQL

437

Je crée un formulaire pour envoyer des messages privés et je veux définir la maxlengthvaleur d'une zone de texte appropriée à la longueur maximale d'un textchamp dans ma table de base de données MySQL. Combien de caractères un champ de texte de type peut-il stocker?

Si beaucoup, serais-je en mesure de spécifier la longueur dans le champ de type de texte de base de données comme je le ferais avec varchar?

CyberJunkie
la source
5
Taper 64k dans un champ de texte simple? douloureux ...
Marc B
169
@Marc B Ne sous-estimez jamais la capacité d'un utilisateur à coller de grandes quantités de déchets dans un champ de message texte privé.
simontemplar
5
Et c'est pourquoi vous devriez restreindre la capacité du
champ de texte

Réponses:

750

Voir pour les nombres maximum: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

TINYBLOB, TINYTEXT       L + 1 bytes, where L < 2^8    (255 Bytes)
BLOB, TEXT               L + 2 bytes, where L < 2^16   (64 Kilobytes)
MEDIUMBLOB, MEDIUMTEXT   L + 3 bytes, where L < 2^24   (16 Megabytes)
LONGBLOB, LONGTEXT       L + 4 bytes, where L < 2^32   (4 Gigabytes)

L est le nombre d'octets dans votre champ de texte. Ainsi, le nombre maximal de caractères pour le texte est de 2 16 -1 (en utilisant des caractères à un octet). Signifie 65 535 caractères (en utilisant des caractères à un octet).

Encodage UTF-8 / MultiByte : en utilisant l'encodage MultiByte, chaque caractère peut consommer plus d'un octet d'espace. Pour UTF-8, la consommation d'espace est comprise entre 1 et 4 octets par caractère.

fyr
la source
2
@ fyr- Voici ce que signifie pour L + 2 octets, où L <2 ^ 16? Pourriez-vous s'il vous plaît le définir un peu plus? Sinon, vous pouvez me dire combien de caractères nous pouvons stocker dans le champ de texte? S'il vous plaît ....
Bajrang
2
@JJ L est le nombre de caractères et le nombre de caractères doit être inférieur à 2 pour une puissance de 16. 2 ^ 16 = 65536. Vous pouvez donc entrer 65535 caractères qui consomment 65535 octets + 3 octets = 65 538 octets par entier champ rempli.
fyr
9
Notez que les limites de taille sont en octets . Donc, si vous utilisez des caractères multi-octets, vous n'obtenez pas 2 ^ 16 caractères dans une colonne TEXT, vous obtenez cependant autant de caractères que vous pouvez stocker dans 2 ^ 16 octets.
Bill Karwin
4
Ce que Bill Karwin a dit. Octets, pas des caractères. Un caractère peut utiliser 4 octets pour stocker avec l'encodage donné (comme 💩 en UTF-8).
basic6
8
Notez que dans MySQL, utf8 consomme jusqu'à 3 octets, utf8mb4 en consomme jusqu'à 4. référence
mpen
126

TINYTEXTE: 256 octets
TEXTE: 65 535 octets
MOYENTEXTE: 16 777
215 octets LONGTEXTE: 4 294 967 295 octets

Cristian Oana
la source
10
Je pense que TINYTEXT devrait être de 255 octets au lieu de 256 octets, selon la réponse acceptée?
cytsunny
83
Type       | Approx. Length     | Exact Max. Length Allowed
-----------------------------------------------------------
TINYTEXT   | 256 Bytes          |           255 characters
TEXT       |  64 Kilobytes      |        65,535 characters
MEDIUMTEXT |  16 Megabytes      |    16,777,215 characters
LONGTEXT   |   4 Gigabytes      | 4,294,967,295 characters

Remarque: Si vous utilisez des caractères multi-octets (comme l'arabe, où chaque caractère arabe prend 2 octets), la colonne "Longueur maximale exacte autorisée" pour TINYTEXTpeut contenir jusqu'à 127 caractères arabes (Remarque: espace, tiret, trait de soulignement et autres caractères similaires) , sont des caractères à 1 octet).

Fondamentalement, c'est comme:

"Longueur maximale exacte autorisée" = "Longueur approximative" en octets - 1

evilReiko
la source
18

Selon http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html , la limite est de L + 2 bytes, where L < 2^1664 Ko.

Vous ne devriez pas avoir à vous soucier de la limiter, elle est automatiquement décomposée en morceaux qui s'ajoutent à mesure que la chaîne se développe, donc elle n'utilisera pas toujours aveuglément 64k.

Blindy
la source
8

Combien de caractères un champ de texte de type peut-il stocker?

Selon la documentation, vous pouvez utiliser 21 844 caractères au maximum si le jeu de caractères est UTF8

Si beaucoup, serais-je en mesure de spécifier la longueur dans le champ de type de texte db comme je le ferais avec varchar?

Vous n'avez pas besoin de spécifier la longueur. Si vous avez besoin de plus de caractères, utilisez les types de données MEDIUMTEXT ou LONGTEXT. Avec VARCHAR, la longueur spécifiée n'est pas pour l'exigence de stockage, c'est uniquement pour la façon dont les données sont récupérées de la base de données.

SCC
la source
8
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

TINYTEXTest un type de données de chaîne qui peut stocker jusqu'à des 255caractères.

TEXTest un type de données chaîne qui peut stocker jusqu'à 65,535caractères. TEXTest couramment utilisé pour les articles courts.

LONGTEXTest un type de données de chaîne avec une longueur maximale de 4,294,967,295caractères. À utiliser LONGTEXTsi vous devez stocker un texte volumineux, tel qu'un chapitre d'un roman.

Sachith
la source
1

TEXTest un type de données de chaîne pouvant contenir jusqu'à 65 535 caractères. Mais si vous voulez stocker plus de données, changez son type de données enLONGTEXT

ALTER TABLE name_tabelCHANGE text_fieldLONGTEXT CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL;

sohel shaikh
la source
1

Pour la version 8.0 de MySql.

Exigences de stockage de type numérique

Data Type       Storage Required
TINYINT         1 byte
SMALLINT        2 bytes
MEDIUMINT       3 bytes
INT, INTEGER    4 bytes
BIGINT          8 bytes
FLOAT(p)        4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT           4 bytes
DOUBLE, REAL    8 bytes
DECIMAL(M,D), NUMERIC(M,D)  Varies; see following discussion
BIT(M)  approximately (M+7)/8 bytes

Les valeurs des colonnes DECIMAL (et NUMERIC) sont représentées à l'aide d'un format binaire qui contient neuf chiffres décimaux (base 10) dans quatre octets. Le stockage des parties entières et fractionnaires de chaque valeur est déterminé séparément. Chaque multiple de neuf chiffres nécessite quatre octets, et les chiffres «restants» nécessitent une fraction de quatre octets. Le stockage requis pour les chiffres en excès est donné par le tableau suivant.

Exigences de stockage de type de date et d'heure Pour les colonnes TIME, DATETIME et TIMESTAMP, le stockage requis pour les tables créées avant MySQL 5.6.4 diffère des tables créées à partir de 5.6.4. Cela est dû à un changement de 5.6.4 qui permet à ces types d'avoir une partie fractionnaire, ce qui nécessite de 0 à 3 octets.

Data Type   Storage Required Before MySQL 5.6.4   Storage Required as of MySQL 5.6.4
YEAR        1 byte                                1 byte
DATE        3 bytes                               3 bytes
TIME        3 bytes                               3 bytes + fractional seconds storage
DATETIME    8 bytes                               5 bytes + fractional seconds storage
TIMESTAMP   4 bytes                               4 bytes + fractional seconds storage

Depuis MySQL 5.6.4, le stockage pour YEAR et DATE reste inchangé. Cependant, TIME, DATETIME et TIMESTAMP sont représentés différemment. DATETIME est compressé plus efficacement, nécessitant 5 plutôt que 8 octets pour la partie non fractionnelle, et les trois parties ont une partie fractionnaire qui nécessite de 0 à 3 octets, en fonction de la précision des secondes fractionnaires des valeurs stockées.

Fractional Seconds Precision    Storage Required
0                               0 bytes
1, 2                            1 byte
3, 4                            2 bytes
5, 6                            3 bytes

Par exemple, TIME (0), TIME (2), TIME (4) et TIME (6) utilisent respectivement 3, 4, 5 et 6 octets. TIME et TIME (0) sont équivalents et nécessitent le même stockage.

Pour plus d'informations sur la représentation interne des valeurs temporelles, consultez MySQL Internals: Important Algorithms and Structures.

Exigences de stockage des types de chaînes Dans le tableau suivant, M représente la longueur de colonne déclarée en caractères pour les types de chaînes non binaires et en octets pour les types de chaînes binaires. L représente la longueur réelle en octets d'une valeur de chaîne donnée.

Data Type                    Storage Required
CHAR(M)                      The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
BINARY(M)                    M bytes, 0 <= M <= 255
VARCHAR(M), VARBINARY(M)     L + 1 bytes if column values require 0  255 bytes, L + 2 bytes if values may require more than 255 bytes
TINYBLOB, TINYTEXT           L + 1 bytes, where L < 28
BLOB, TEXT                   L + 2 bytes, where L < 216
MEDIUMBLOB, MEDIUMTEXT       L + 3 bytes, where L < 224
LONGBLOB, LONGTEXT           L + 4 bytes, where L < 232
ENUM('value1','value2',...)  1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum)
SET('value1','value2',...)   1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)
Rohit.007
la source