Longitud máxima para texto de tipo MySQL

437

Estoy creando un formulario para enviar mensajes privados y quiero establecer el maxlengthvalor de un área de texto apropiado para la longitud máxima de un textcampo en mi tabla de base de datos MySQL. ¿Cuántos caracteres puede almacenar un campo de texto de tipo?

Si es mucho, ¿podría especificar la longitud en el campo de tipo de texto de la base de datos como lo haría con varchar?

CyberJunkie
fuente
55
¿Escribiendo 64k en un campo de texto simple? doloroso ...
Marc B
169
@Marc B Nunca subestimes la capacidad de un usuario para pegar grandes cantidades de basura en un campo de mensaje de texto privado.
simontemplar
55
Y es por eso que debe restringir la capacidad del campo de texto y siempre validar sus entradas ...
jpangamarca

Respuestas:

750

Consulte los números máximos: http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html

TINYBLOB, TINYTEXT       L + 1 bytes, where L < 2^8    (255 Bytes)
BLOB, TEXT               L + 2 bytes, where L < 2^16   (64 Kilobytes)
MEDIUMBLOB, MEDIUMTEXT   L + 3 bytes, where L < 2^24   (16 Megabytes)
LONGBLOB, LONGTEXT       L + 4 bytes, where L < 2^32   (4 Gigabytes)

L es el número de bytes en su campo de texto. Entonces, el número máximo de caracteres para el texto es 2 16 -1 (usando caracteres de un solo byte). Significa 65 535 caracteres (usando caracteres de un solo byte).

Codificación UTF-8 / MultiByte : utilizando la codificación MultiByte, cada carácter puede consumir más de 1 byte de espacio. Para UTF-8, el consumo de espacio es de 1 a 4 bytes por char.

fyr
fuente
2
@ fyr- Aquí, ¿qué significa para L + 2 bytes, donde L <2 ^ 16? ¿Podrías definirlo un poco más? De lo contrario, ¿puede decirme cuántos caracteres podemos almacenar en el campo de texto? Por favor ....
Bajrang
2
@JJ L es el número de caracteres y el número de caracteres debe ser menor que 2 a la potencia de 16. 2 ^ 16 = 65536. Por lo tanto, puede ingresar 65535 caracteres que consumen 65535 bytes + 3 bytes = 65 538 bytes por completo campo lleno
fyr
99
Tenga en cuenta que los límites de tamaño están en bytes . Entonces, si usa caracteres de varios bytes, no obtendrá 2 ^ 16 caracteres en una columna TEXTO, obtendrá la cantidad de caracteres que puede almacenar en 2 ^ 16 bytes.
Bill Karwin
44
Lo que dijo Bill Karwin. BYTES, NO PERSONAJES. Un personaje puede usar 4 bytes para almacenar con la codificación dada (como 💩 en UTF-8).
básico6
8
Tenga en cuenta que en MySQL, utf8 consume hasta 3 bytes, utf8mb4 consume hasta 4. referencia
mpen
126

TINYTEXT: 256 bytes
TEXT: 65,535 bytes
MEDIUMTEXT: 16,777,215 bytes
LONGTEXT: 4,294,967,295 bytes

Cristian Oana
fuente
10
Creo que TINYTEXT debería tener 255 bytes en lugar de 256 bytes, de acuerdo con la respuesta aceptada.
cytsunny
83
Type       | Approx. Length     | Exact Max. Length Allowed
-----------------------------------------------------------
TINYTEXT   | 256 Bytes          |           255 characters
TEXT       |  64 Kilobytes      |        65,535 characters
MEDIUMTEXT |  16 Megabytes      |    16,777,215 characters
LONGTEXT   |   4 Gigabytes      | 4,294,967,295 characters

Nota: Si usa caracteres multibyte (como el árabe, donde cada carácter árabe toma 2 bytes), la columna "Longitud máxima exacta permitida" TINYTEXTpuede contener hasta 127 caracteres árabes (Nota: espacio, guión, guión bajo y otros caracteres similares , son caracteres de 1 byte).

Básicamente, es como:

"Longitud máxima exacta permitida" = "Longitud aproximada" en bytes - 1

evilReiko
fuente
8

¿Cuántos caracteres puede almacenar un campo de texto de tipo?

De acuerdo con la documentación Puede usar un máximo de 21,844 caracteres si el juego de caracteres es UTF8

Si es mucho, ¿podría especificar la longitud en el campo de tipo de texto db como lo haría con varchar?

No necesita especificar la longitud. Si necesita más caracteres, utilice los tipos de datos MEDIUMTEXT o LONGTEXT. Con VARCHAR, la longitud especificada no es para el requisito de almacenamiento, es solo para la forma en que los datos se recuperan de la base de datos.

SCC
fuente
8
TINYTEXT 256 bytes
TEXT 65,535 bytes ~64kb
MEDIUMTEXT 16,777,215 bytes ~16MB
LONGTEXT 4,294,967,295 bytes ~4GB

TINYTEXTes un tipo de datos de cadena que puede almacenar hasta 255caracteres.

TEXTes un tipo de datos de cadena que puede almacenar hasta 65,535caracteres. TEXTse usa comúnmente para artículos breves.

LONGTEXTes un tipo de datos de cadena con una longitud máxima de 4,294,967,295caracteres. Úselo LONGTEXTsi necesita almacenar texto grande, como un capítulo de una novela.

Sachith
fuente
1

TEXTes un tipo de datos de cadena que puede almacenar hasta 65.535 caracteres. Pero aún así, si desea almacenar más datos, cambie su tipo de datos aLONGTEXT

ALTER TABLE name_tabelCHANGE text_fieldLONGTEXT CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL;

sohel shaikh
fuente
1

Para la versión 8.0 de MySql.

Requisitos de almacenamiento de tipo numérico

Data Type       Storage Required
TINYINT         1 byte
SMALLINT        2 bytes
MEDIUMINT       3 bytes
INT, INTEGER    4 bytes
BIGINT          8 bytes
FLOAT(p)        4 bytes if 0 <= p <= 24, 8 bytes if 25 <= p <= 53
FLOAT           4 bytes
DOUBLE, REAL    8 bytes
DECIMAL(M,D), NUMERIC(M,D)  Varies; see following discussion
BIT(M)  approximately (M+7)/8 bytes

Los valores para las columnas DECIMAL (y NUMÉRICA) se representan utilizando un formato binario que incluye nueve dígitos decimales (base 10) en cuatro bytes. El almacenamiento para las partes enteras y fraccionarias de cada valor se determina por separado. Cada múltiplo de nueve dígitos requiere cuatro bytes, y los dígitos "sobrantes" requieren una fracción de cuatro bytes. El almacenamiento requerido para el exceso de dígitos viene dado por la siguiente tabla.

Requisitos de almacenamiento de tipo de fecha y hora Para las columnas TIME, DATETIME y TIMESTAMP, el almacenamiento requerido para las tablas creadas antes de MySQL 5.6.4 difiere de las tablas creadas a partir de 5.6.4. Esto se debe a un cambio en 5.6.4 que permite que estos tipos tengan una parte fraccional, que requiere de 0 a 3 bytes.

Data Type   Storage Required Before MySQL 5.6.4   Storage Required as of MySQL 5.6.4
YEAR        1 byte                                1 byte
DATE        3 bytes                               3 bytes
TIME        3 bytes                               3 bytes + fractional seconds storage
DATETIME    8 bytes                               5 bytes + fractional seconds storage
TIMESTAMP   4 bytes                               4 bytes + fractional seconds storage

A partir de MySQL 5.6.4, el almacenamiento para AÑO y FECHA permanece sin cambios. Sin embargo, TIME, DATETIME y TIMESTAMP se representan de manera diferente. DATETIME se empaqueta de manera más eficiente, requiriendo 5 en lugar de 8 bytes para la parte no fraccional, y las tres partes tienen una parte fraccional que requiere de 0 a 3 bytes, dependiendo de la precisión de segundos fraccionados de los valores almacenados.

Fractional Seconds Precision    Storage Required
0                               0 bytes
1, 2                            1 byte
3, 4                            2 bytes
5, 6                            3 bytes

Por ejemplo, TIME (0), TIME (2), TIME (4) y TIME (6) usan 3, 4, 5 y 6 bytes, respectivamente. TIME y TIME (0) son equivalentes y requieren el mismo almacenamiento.

Para obtener detalles sobre la representación interna de los valores temporales, consulte MySQL Internals: algoritmos y estructuras importantes.

Requisitos de almacenamiento de tipo de cadena En la siguiente tabla, M representa la longitud de columna declarada en caracteres para tipos de cadena no binarios y bytes para tipos de cadenas binarias. L representa la longitud real en bytes de un valor de cadena dado.

Data Type                    Storage Required
CHAR(M)                      The compact family of InnoDB row formats optimize storage for variable-length character sets. See COMPACT Row Format Characteristics. Otherwise, M × w bytes, <= M <= 255, where w is the number of bytes required for the maximum-length character in the character set.
BINARY(M)                    M bytes, 0 <= M <= 255
VARCHAR(M), VARBINARY(M)     L + 1 bytes if column values require 0  255 bytes, L + 2 bytes if values may require more than 255 bytes
TINYBLOB, TINYTEXT           L + 1 bytes, where L < 28
BLOB, TEXT                   L + 2 bytes, where L < 216
MEDIUMBLOB, MEDIUMTEXT       L + 3 bytes, where L < 224
LONGBLOB, LONGTEXT           L + 4 bytes, where L < 232
ENUM('value1','value2',...)  1 or 2 bytes, depending on the number of enumeration values (65,535 values maximum)
SET('value1','value2',...)   1, 2, 3, 4, or 8 bytes, depending on the number of set members (64 members maximum)
Rohit.007
fuente