Selon la documentation MySQL , il existe quatre types de TEXTE:
- TINYTEXT
- TEXTE
- MOYENTEXTE
- LONGTEXT
Quelle est la longueur maximale que je peux stocker dans une colonne de chaque type de données en supposant que le codage des caractères est UTF-8?
Selon la documentation 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 des caractères est UTF-8?
Réponses:
De la documentation :
Type | Longueur maximale ----------- + ------------------------------------- TINYTEXT | 255 (2 8 −1) octets TEXTE | 65 535 (2 16 −1) octets = 64 Ko MEDIUMTEXT | 16 777 215 (2 24 −1) octets = 16 Mio LONGTEXT | 4 294 967 295 (2 32 −1) octets = 4 Gio
Notez que le nombre de caractères pouvant être stockés dans votre colonne dépendra de l' encodage des caractères .
A TEXT column with a maximum length of 255 (28 – 1) characters. The effective maximum length is less if the value contains multi-byte characters.
Voir la réponse d'Ankan pour plus de détails.
Extension de la même réponse
CECI EST UN TABLEAU D'ESTIMATION BRUT POUR DES DÉCISIONS RAPIDES!
xx
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 également vous référer à la réponse de Chris V: https://stackoverflow.com/a/35785869/1881812
TINYTEXT
compte 1 octet + 8 octets par rapport à la taille de l'enregistrement, tandis qu'un VARCHAR(255)
compte de 1 octet + 255 octets jusqu'à 2 octets + 1020 octets (4 octets de caractères UTF-8) par rapport à la taille d'enregistrement.
Relevant le défi de @ Ankan-Zerob, voici mon estimation de la longueur maximale qui peut être stockée dans chaque type de texte mesuré 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 la longueur des mots varie en fonction du domaine (par exemple, langue parlée vs articles académiques), il n'y a donc aucun intérêt à être trop précis. L'anglais est principalement composé de caractères ASCII à un octet, avec des caractères à plusieurs octets très occasionnels, si proches d'un octet par lettre. Un caractère supplémentaire doit être autorisé pour les espaces entre les mots, j'ai donc arrondi à 5,8 octets par mot. Les langues avec beaucoup d'accents telles que le polonais stockent un peu moins de mots, comme par exemple l'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., 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.
Scripts CJK (Hanzi, Kanji, Hiragana, Katakana, etc.) Je ne sais rien; Je crois que les caractères nécessitent principalement 3 octets en UTF-8, et (avec une simplification massive), ils pourraient être considérés comme utilisant environ 2 caractères par mot, ils seraient donc quelque part entre les deux autres. (Les scripts CJK nécessiteront probablement moins de stockage en utilisant UTF-16, selon).
Ceci est bien sûr ignorer les frais généraux de stockage, etc.