Según los documentos de MySQL , hay cuatro tipos de TEXTO:
- TINYTEXT
- TEXTO
- TEXTO MEDIO
- 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?
Según los documentos de MySQL , hay cuatro tipos de TEXTO:
¿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?
Respuestas:
De la documentación :
Tipo | Longitud máxima ----------- + ------------------------------------- TINYTEXT | 255 (2 8 −1) bytes TEXTO | 65,535 (2 16 −1) bytes = 64 KiB MEDIUMTEXT | 16.777.215 (2 24 −1) bytes = 16 MiB LONGTEXT | 4,294,967,295 (2 32 −1) bytes = 4 GiB
Tenga en cuenta que la cantidad de caracteres que se pueden almacenar en su columna dependerá de la codificación de caracteres .
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.
Vea la respuesta de Ankan para más detalles.
Expansión de la misma respuesta
¡ESTA ES UNA TABLA DE ESTIMACIÓN EN BRUTO PARA DECISIONES RÁPIDAS!
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
Consulte también la respuesta de Chris V: https://stackoverflow.com/a/35785869/1881812
TINYTEXT
cuenta 1 byte + 8 byte contra el tamaño del registro, mientras que VARCHAR(255)
cuenta desde 1 byte + 255 byte hasta 2 byte + 1020 byte (4 bytes UTF-8 caracteres) contra el tamaño del registro.
En respuesta 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 la longitud de las palabras variará según el dominio (p. Ej., Lenguaje hablado frente a documentos académicos), por lo que no tiene sentido ser demasiado preciso. El inglés es principalmente caracteres ASCII de un solo byte, con caracteres de varios bytes muy ocasionales, muy cerca de un byte por letra. Se debe permitir un carácter adicional para los espacios entre palabras, por lo que he redondeado hacia abajo desde 5.8 bytes por palabra. Los idiomas con muchos acentos, como el polaco, almacenarían un poco menos de palabras, como por ejemplo el alemán con palabras más largas.
Los idiomas que requieren caracteres de varios bytes como el griego, árabe, hebreo, hindi, 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 de CJK (Hanzi, Kanji, Hiragana, Katakana, etc.) No sé nada; Creo que los caracteres requieren principalmente 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).
Por supuesto, esto ignora los gastos generales de almacenamiento, etc.