Comprimento máximo para texto do tipo MySQL


437

Estou criando um formulário para enviar mensagens privadas e quero definir o maxlengthvalor de uma área de texto apropriada ao tamanho máximo de um textcampo na minha tabela de banco de dados MySQL. Quantos caracteres um campo de texto de tipo pode armazenar?

Se muito, eu seria capaz de especificar o comprimento no campo de tipo de texto do banco de dados, como faria com varchar?


5
Digitando 64k em um campo de texto simples? dolorosa ...
Marc B

169
@ Marc B Nunca subestime a capacidade do usuário de colar grandes quantidades de lixo em um campo de mensagem de texto particular.
Simremplar # 9/13

5
E é por isso que você deve restringir a capacidade textfield e sempre validar suas entradas ...
jpangamarca

Respostas:


750

Consulte para 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 é o número de bytes no seu campo de texto. Portanto, o número máximo de caracteres para o texto é 2 16 -1 (usando caracteres de byte único). Significa 65 535 caracteres (usando caracteres de byte único).

Codificação UTF-8 / MultiByte : usando a codificação MultiByte, cada caractere pode consumir mais de 1 byte de espaço. Para UTF-8, o consumo de espaço é de 1 a 4 bytes por caractere.


2
@ fyr- Aqui o que significa para L + 2 bytes, onde L <2 ^ 16? Você poderia defini-lo um pouco mais? Caso contrário, você pode me dizer quantos caracteres podemos armazenar no campo de texto? Por favor ...
Bajrang

2
@JJ L é o número de caracteres e o número de caracteres precisa ser menor que 2 para a potência de 16. 2 ^ 16 = 65536. Portanto, você pode inserir 65535 caracteres que consomem 65535 bytes + 3 bytes = 6553 bytes campo preenchido.
fyr

9
Observe que os limites de tamanho estão em bytes . Portanto, se você usar caracteres de vários bytes, não terá 2 ^ 16 caracteres em uma coluna TEXT, mas terá muitos caracteres que poderá armazenar em 2 ^ 16 bytes.
Bill Karwin

4
O que Bill Karwin disse. BYTES, NÃO PERSONAGENS. Um caractere pode usar 4 bytes para armazenar com a codificação fornecida (como 💩 em UTF-8).
basic6

8
Observe que no MySQL, utf8 consome até 3 bytes, utf8mb4 consome até 4. referência
mpen

126

TINYTEXT: 256 bytes
TEXTO: 65.535 bytes
MEDIUMTEXT: 16.777.215 bytes
LONGTEXT: 4.294.967.295 bytes


10
Eu acho que o TINYTEXT deve ter 255 bytes em vez de 256 bytes, de acordo com a resposta aceita?
precisa saber é

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: Se estiver usando caracteres multibyte (como árabe, onde cada caractere árabe ocupa 2 bytes), a coluna "Comprimento Máximo Exato Permitido" TINYTEXTpode conter até 127 caracteres árabes (Nota: espaço, traço, sublinhado e outros caracteres , são caracteres de 1 byte).

Basicamente, é como:

"Comprimento máximo exato permitido" = "Comprimento aproximado" em bytes - 1



8

Quantos caracteres um campo de texto de tipo pode armazenar?

De acordo com a documentação Você pode usar no máximo 21.844 caracteres se o conjunto de caracteres for UTF8

Se muito, eu seria capaz de especificar o comprimento no campo de tipo de texto db como faria com varchar?

Você não precisa especificar o comprimento. Se você precisar de mais caracteres, use os tipos de dados MEDIUMTEXT ou LONGTEXT. Com o VARCHAR, o comprimento especificado não é para requisitos de armazenamento, é apenas para como os dados são recuperados da base de dados.


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

TINYTEXTé um tipo de dados de cadeia que pode armazenar até 255caracteres.

TEXTé um tipo de dados de cadeia que pode armazenar até 65,535caracteres. TEXTé comumente usado para artigos breves.

LONGTEXTé um tipo de dados de cadeia com um comprimento máximo de 4,294,967,295caracteres. Use LONGTEXTse precisar armazenar texto grande, como um capítulo de um romance.


1

TEXTé um tipo de dados de cadeia que pode armazenar até 65.535 caracteres. Mas ainda assim, se você deseja armazenar mais dados, altere seu tipo de dados paraLONGTEXT

ALTER TABLE name_tabelCHANGE text_fieldLONGTEXT CHARACTER SET utf8COLLATE utf8_general_ciNOT NULL;


1

Para o MySql versão 8.0.

Requisitos de armazenamento 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

Os valores das colunas DECIMAL (e NUMERIC) são representados usando um formato binário que comporta nove dígitos decimais (base 10) em quatro bytes. O armazenamento para as partes inteiras e fracionárias de cada valor é determinado separadamente. Cada múltiplo de nove dígitos requer quatro bytes, e os dígitos "restantes" exigem uma fração de quatro bytes. O armazenamento necessário para dígitos em excesso é fornecido pela tabela a seguir.

Requisitos de armazenamento de tipo data e hora Para as colunas TIME, DATETIME e TIMESTAMP, o armazenamento necessário para as tabelas criadas antes do MySQL 5.6.4 difere das tabelas criadas a partir da 5.6.4 em diante. Isso ocorre devido a uma alteração na 5.6.4 que permite que esses tipos tenham uma parte fracionária, que requer 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 do MySQL 5.6.4, o armazenamento para YEAR e DATE permanece inalterado. No entanto, TIME, DATETIME e TIMESTAMP são representados de maneira diferente. DATETIME é compactado com mais eficiência, exigindo 5 em vez de 8 bytes para a parte não fracionária, e as três partes têm uma parte fracionária que requer de 0 a 3 bytes, dependendo da precisão fracionada dos segundos dos valores armazenados.

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

Por exemplo, HORA (0), HORA (2), HORA (4) e HORA (6) usam 3, 4, 5 e 6 bytes, respectivamente. TIME e TIME (0) são equivalentes e requerem o mesmo armazenamento.

Para obter detalhes sobre representação interna de valores temporais, consulte Internos do MySQL: Algoritmos e Estruturas Importantes.

Requisitos de armazenamento do tipo de string Na tabela a seguir, M representa o comprimento da coluna declarada em caracteres para tipos de string não binários e bytes para tipos de string binários. L representa o comprimento real em bytes de um determinado valor de sequência.

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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.