TINYTEXT, TEXT, medium text et LONGTEXT tailles maximales de stockage

Per the MySQL docs , il y a quatre types de texte:

  1. TINYTEXT
  2. TEXT
  3. medium text
  4. LONGTEXT

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?

644
demandé sur James 2012-12-18 16:13:35

4 réponses

De la documentation :

      Type | Maximum length
-----------+-------------------------------------
  TINYTEXT |           255 (2 8−1) bytes
      TEXT |        65,535 (216−1) bytes = 64 KiB
MEDIUMTEXT |    16,777,215 (224−1) bytes = 16 MiB
  LONGTEXT | 4,294,967,295 (232−1) bytes =  4 GiB

notez que le nombre de caractères qui peuvent être stockés dans votre colonne dépendra du caractère encoding .

1294
répondu Bridge 2015-04-25 13:49:54

extension de la même réponse

  1. Ce tant de poster : varchar (255) vs tinytext / tinyblob et varchar (65535) vs blob /text décrit en détail les frais généraux et les mécanismes de stockage.
  2. comme indiqué au point (1), un VARCHAR devrait toujours être utilisé à la place de TINYTEXT. Toutefois, lors de L'utilisation de VARCHAR, le rowsize max ne doit pas dépasser 65535 octets.
  3. comme décrit ici http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html , max 3 octets pour utf-8.

IL S'AGIT D'UNE TABLE D'ESTIMATION GROSSIÈRE POUR DES DÉCISIONS RAPIDES!

  1. au pire des cas, les hypothèses (3 octets par utf-8 char) dans le meilleur des cas (1 octet par utf-8 char)
  2. en supposant que la langue anglaise a une moyenne de 4,5 lettres par mot
  3. x est le nombre de octets attribués

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 |           21845     | 65,535            | 4854.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

référez-vous aussi à la réponse de Chris V : https://stackoverflow.com/a/35785869/1881812

201
répondu Ankan-Zerob 2017-05-23 11:47:29

S'élevant au défi de @Ankan-Zerob, c'est mon estimation de la longueur maximale qui peut ê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

In English , 4.8 letters per word is probably a good average (eg norvig.com/mayzner.html ), bien que la longueur des mots varie selon le domaine (par exemple, langue parlée par rapport aux documents académiques), il n'y a donc pas de raison d'être trop précis. L'anglais est principalement des caractères ASCII à un seul octet, avec des caractères multi-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, donc j'ai arrondi à partir de 5,8 octets par mot. Les langues avec beaucoup d'accents comme le polonais say stockeraient un peu moins de mots, comme le ferait par exemple l'allemand avec des mots plus longs.

Langues d'exiger une multi-byte des personnages comme le grec, l'arabe, l'hébreu, le Hindi, Thaï, etc, etc nécessite généralement deux octets par caractère en UTF-8. Devinant sauvagement à 5 lettres par mot, j'ai arrondi de 11 bytes par mot.

scripts CJK (Hanzi, Kanji, Hiragana, Katakana, etc) Je ne sais rien de; 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 à utiliser environ 2 caractères par mot, de sorte qu'ils seraient quelque part entre les deux autres. (Les scripts CJK nécessiteront probablement moins de stockage en UTF-16, dépendre.)

cela ne tient évidemment pas compte des frais généraux de stockage, etc.

31
répondu ChrisV 2016-03-04 00:33:26

c'est beau mais ne répond pas à la question:

"UN VARCHAR doit toujours être utilisée à la place de TINYTEXT."Tinytext est utile si vous avez des rangées larges-puisque les données sont stockées hors de l'enregistrement. Il y a une performance aérienne, mais elle a une utilité.

3
répondu colin0117 2018-05-17 16:38:06