Pregunta Tamaños de almacenamiento máximos 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?


630
2017-12-18 12:13


origen


Respuestas:


Desde el documentación :

      Tipo | Longitud máxima
----------- + -------------------------------------
  TINYTEXT | 255 (2 8-1) bytes
      TEXTO | 65,535 (2dieciséis-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 puede almacenar en su columna dependerá de la codificación de caracteres.


1264
2017-12-18 12:18



Expansión de la misma respuesta

  1. Esta publicación SO: varchar (255) vs tinytext / tinyblob y varchar (65535) vs blob / texto describe en detalle los gastos generales y los mecanismos de almacenamiento.
  2. Como se señala en el punto (1), siempre se debe usar A VARCHAR en lugar de TINYTEXT. Sin embargo, al usar VARCHAR, el máximo de filas 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 EN BRUTO PARA DECISIONES RÁPIDAS!

  1. Por lo tanto, las suposiciones del peor caso (3 bytes por utf-8 char) para el mejor de los casos (1 byte por utf-8 char)
  2. Asumiendo que el idioma inglés tiene un promedio de 4.5 letras por palabra
  3. x es la cantidad 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, consulte la respuesta de Chris V también: https://stackoverflow.com/a/35785869/1881812


197
2018-04-19 12:18



Asciendo 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 (p. Ej. norvig.com/mayzner.html), aunque las duraciones de las palabras variarán según el dominio (por ejemplo, el idioma hablado frente a los artículos 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 caracteres de varios bytes muy ocasionales, tan cerca de un byte por letra. Se debe permitir un carácter adicional para espacios entre palabras, por lo que he redondeado hacia abajo desde 5,8 bytes por palabra. Los idiomas con muchos acentos como, por ejemplo, polaco, almacenarían pocas palabras, como por ejemplo, Alemán con palabras más largas.

Idiomas que requieren multi-byte caracteres como el griego, el árabe, el hebreo, el hindi, el tailandés, etc., generalmente requieren dos bytes por carácter en UTF-8. Adivinando salvajemente a 5 letras por palabra, he redondeado hacia abajo desde 11 bytes por palabra.

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

Por supuesto, esto ignora los gastos generales de almacenamiento, etc.


31
2018-03-04 00:33



Esto es bueno, pero no responde 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
2018-05-18 15:36