Per les documents MySQL , il existe quatre types de texte:
Quelle est la longueur maximale que je peux stocker dans une colonne de chaque type de données en supposant que le codage de caractères est UTF-8?
De la documentation :
Type | Longueur maximale ----------- + ------------------------------- ------ TINYTEXT | 255 (2 8−1) octets TEXT | 65 535 (216−1) bytes = 64 KiB MEDIUMTEXT | 16 777 215 (224−1) octets = 16 Mio LONGTEXT | 4 294 967 295 (232−1) octets = 4 Gio
Notez que le nombre de caractères pouvant être stockés dans votre colonne dépend du codage de caractères .
Expansion de la même réponse
CECI IS UN TABLEAU D’ESTIMATION POUR DES DÉCISIONS RAPIDES!
x-x
Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
TINYTEXT | 85 | 255 | 18 - 56
TEXT | 21,845 | 65,535 | 4,854.44 - 14,563.33
MEDIUMTEXT | 5,592,415 | 16,777,215 | 1,242,758.8 - 3,728,270
LONGTEXT | 1,431,655,765 | 4,294,967,295 | 318,145,725.5 - 954,437,176.6
Veuillez vous reporter également à la réponse de Chris V: https://stackoverflow.com/a/35785869/1881812
Relevant le défi de @ Ankan-Zerob, voici mon estimation de la longueur maximale pouvant être stockée dans chaque type de texte mesurée en mots :
Type | Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
TINYTEXT | 255 | ±44 | ±23
TEXT | 65,535 | ±11,000 | ±5,900
MEDIUMTEXT | 16,777,215 | ±2,800,000 | ±1,500,000
LONGTEXT | 4,294,967,295 | ±740,000,000 | ±380,000,000
En anglais , 4,8 lettres par mot est probablement une bonne moyenne (par exemple, norvig.com/mayzner.html ), bien que Word les longueurs varient en fonction du domaine (par exemple, la langue parlée par rapport aux papiers académiques), il est donc inutile d'être trop précis. L'anglais est principalement composé de ASCII caractères sur un octet, avec des caractères occasionnels sur plusieurs octets, si proches d'un octet par lettre. Un caractère supplémentaire doit être autorisé pour les espaces inter-mots. J'ai donc arrondi à 5,8 octets par mot. Les langues avec beaucoup d’accents, comme le polonais par exemple, stockeront un peu moins de mots, comme par exemple Allemand avec des mots plus longs.
Les langues nécessitant des caractères multi-octets tels que le grec, l'arabe, l'hébreu, l'hindi, le thaï, etc., nécessitent généralement deux octets par caractère en UTF-8. Devinant sauvagement à 5 lettres par mot, j'ai arrondi à 11 octets par mot.
Les scripts CJK (Hanzi, Kanji, Hiragana, Katakana, etc.) Je ne connais rien; Je pense que les caractères nécessitent principalement 3 octets en UTF-8, et (avec une simplification énorme), ils pourraient utiliser environ 2 caractères par mot, ils seraient donc quelque part entre les deux autres. (Les scripts CJK nécessiteront probablement moins de stockage avec UTF-16, en fonction).
Ceci est bien sûr ignorer les frais généraux de stockage, etc.
C'est gentil mais ne répond pas à la question:
"Un VARCHAR doit toujours être utilisé à la place de TINYTEXT." Tinytext est utile si vous avez des lignes larges, car les données sont stockées hors de l’enregistrement. Il y a un surcoût lié aux performances, mais il a une utilité.