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?
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.
TINYTEXT: 256 octets
TEXTE: 65 535 octets
MEDIUMTEXT: 16 777 215 octets
LONGTEXT: 4 294 967 295 octets
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 TINYTEXT
serait de 127 caractères. Fondamentalement, c'est le nombre d'octets autorisés -1.
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.
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.
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.
Pour la version MySQL 8.0.
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)
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;