web-dev-qa-db-fra.com

Longueur maximale pour le texte de type MySQL

Je crée un formulaire pour l'envoi de messages privés et je souhaite définir la valeur maxlength d'un textarea approprié à la longueur maximale d'un champ text dans ma table de base de données MySQL. Combien de caractères un type de champ de texte peut-il stocker?

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

378
CyberJunkie

Voir le nombre 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. Donc, le nombre maximum de caractères pour le texte est 216-1 (en utilisant des caractères codés sur un octet). Signifie 65 535 caractères (en utilisant des caractères à octet unique).

Encodage UTF-8/Multi-octets : l'utilisation de l'encodage Multi-octets peut prendre plus d'un octet d'espace. Pour l'UTF-8, la consommation d'espace est comprise entre 1 et 4 octets par caractère.

669
fyr

TINYTEXT: 256 octets
TEXTE: 65 535 octets
MEDIUMTEXT: 16 777 215 octets
LONGTEXT: 4 294 967 295 octets

114
Cristian Oana
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 les lettres arabes où chaque caractère prend 2 octets), la colonne "Longueur exacte exacte autorisée" aura une longueur différente. Par exemple: si vous utilisez des caractères de 2 octets, la longueur maximale exacte de TINYTEXTserait de 127 caractères. Fondamentalement, c'est le nombre d'octets autorisés -1.

59
evilReiko

Selon http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html , la limite est L + 2 bytes, where L < 2^16 ou 64k.

Vous ne devriez pas avoir à vous préoccuper de la limiter, elle est automatiquement divisée en morceaux qui sont ajoutés à mesure que la chaîne grandit, de sorte qu'elle n'utilise pas toujours aveuglément 64k.

18
Blindy

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

Selon Documentation Vous pouvez utiliser 21 844 caractères maximum si le jeu de caractères est UTF8

Si beaucoup est-ce que je serais capable 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écifieng ne correspond pas aux exigences de stockage, mais uniquement à la manière dont les données sont extraites de la base de données.

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

TINYTEXT est un type de données de chaîne pouvant stocker jusqu'à 255 caractères.

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

LONGTEXT est un type de données chaîne avec une longueur maximale de 4,294,967,295 caractères. Utilisez LONGTEXT si vous devez stocker du texte de grande taille, tel qu'un chapitre de roman.

7
Sachith

Pour la version MySQL 8.0.

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 comprenant neuf chiffres décimaux (base 10) sur quatre octets. Le stockage pour les 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 "restants" nécessitent une fraction de quatre octets. La mémoire requise pour les chiffres en excès est donnée dans le tableau suivant.

Configuration requise pour le type de date et heure Pour les colonnes TIME, DATETIME et TIMESTAMP, la mémoire requise pour les tables créées avant MySQL 5.6.4 diffère de celles créées à partir de la version 5.6.4. Cela est dû à un changement dans 5.6.4 qui permet à ces types d'avoir une partie fractionnaire, ce qui nécessite 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 de YEAR et DATE reste inchangé. Cependant, TIME, DATETIME et TIMESTAMP sont représentés différemment. DATETIME est compressé plus efficacement, nécessitant 5 octets au lieu de 8 octets pour la partie non fractionnaire, et les trois parties ont une partie fractionnelle qui nécessite 0 à 3 octets, en fonction de la précision des secondes stockées 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, reportez-vous à MySQL Internals: Algorithmes et structures importants.

Conditions 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)
1
Rohit.007

TEXT est un type de données chaîne pouvant stocker jusqu'à 65 535 caractères. Néanmoins, si vous souhaitez stocker plus de données, changez leur type de données en LONGTEXT

ALTER TABLE name_tabel CHANGE text_field LONGTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

1
sohel shaikh