Tamaños máximos de almacenamiento de TINYTEXT, TEXT, MEDIUMTEXT y LONGTEXT


Por los documentos de MySQL , hay cuatro tipos de TEXTO:

  1. TINYTEXT
  2. TEXTO
  3. MEDIUMTEXT
  4. TEXTO LARGO

¿Cuál es la longitud máxima que puedo almacenar en una columna de cada tipo de datos suponiendo que la codificación de caracteres es UTF-8?

 644
Author: James, 2012-12-18

4 answers

De la documentación :

      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

Tenga en cuenta que el número de caracteres que se pueden almacenar en su columna dependerá de la codificación de caracteres .

 1294
Author: Bridge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-25 13:49:54

Expansión de la misma respuesta

  1. Esto ASÍ post : varchar (255) vs tinytext / tinyblob y varchar(65535) vs blob/text describe en detalle los gastos generales y los mecanismos de almacenamiento.
  2. Como se indica en el punto (1), siempre se debe usar un VARCHAR en lugar de TINYTEXT. Sin embargo, cuando se usa VARCHAR, el tamaño máximo de fila no debe exceder los 65535 bytes.
  3. Como se describe aquí http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-utf8.html , máximo 3 bytes para utf-8.

ESTA ES UNA TABLA DE ESTIMACIÓN APROXIMADA PARA DECISIONES RÁPIDAS!

  1. Así que los supuestos del peor caso (3 bytes por utf-8 char) al mejor caso (1 byte por utf-8 char)
  2. Suponiendo que el idioma inglés tiene un promedio de 4.5 letras por palabra
  3. x es el número de bytes asignados

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

Por favor refiérase a la respuesta de Chris V también: https://stackoverflow.com/a/35785869/1881812

 201
Author: Ankan-Zerob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:29

Subiendo al desafío de @Ankan-Zerob, esta es mi estimación de la longitud máxima que se puede almacenar en cada tipo de texto medido en palabras :

      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 Inglés , 4.8 letras por palabra es probablemente un buen promedio (eg norvig.com/mayzner.html ), aunque la longitud de las palabras variará según el dominio (por ejemplo, idioma hablado vs.documentos académicos), por lo que no tiene sentido ser demasiado preciso. El inglés es en su mayoría caracteres ASCII de un solo byte, con varios bytes muy ocasionales caracteres, tan cerca de un byte por letra. Un carácter adicional tiene que ser permitido para espacios entre palabras, así que he redondeado hacia abajo de 5.8 bytes por palabra. Los idiomas con muchos acentos, como el polaco, almacenarían un poco menos de palabras, al igual que, por ejemplo, el alemán con palabras más largas.

Los idiomas que requieren caracteres multi-byte como el griego, árabe, Hebreo, Hindi, Tailandés, etc, etc normalmente requieren dos bytes por carácter en UTF-8. Adivinando salvajemente a 5 letras por palabra, he redondeado el 11 bytes por palabra.

Los scripts CJK (Hanzi, Kanji, Hiragana, Katakana, etc.) de los que no sé nada; creo que los caracteres en su mayoría requieren 3 bytes en UTF-8, y (con una simplificación masiva) se podría considerar que usan alrededor de 2 caracteres por palabra, por lo que estarían en algún lugar entre los otros dos. (Es probable que los scripts CJK requieran menos almacenamiento usando UTF-16, dependiendo).

Esto es, por supuesto, ignorando los gastos generales de almacenamiento, etc.

 31
Author: ChrisV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-04 00:33:26

Esto es bueno, pero no responde a la pregunta:

"Siempre se debe usar un VARCHAR en lugar de TINYTEXT."Tinytext es útil si tiene filas anchas, ya que los datos se almacenan fuera del registro. Hay una sobrecarga de rendimiento, pero tiene un uso.

 3
Author: colin0117,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-17 16:38:06