De acordo com os documentos do MySQL , existem quatro tipos de texto:
- TINYTEXT
- TEXTO
- MEDIUMTEXT
- LONGTEXT
Qual é o tamanho máximo que posso armazenar em uma coluna de cada tipo de dados, assumindo que a codificação de caracteres é UTF-8?
De acordo com os documentos do MySQL , existem quatro tipos de texto:
Qual é o tamanho máximo que posso armazenar em uma coluna de cada tipo de dados, assumindo que a codificação de caracteres é UTF-8?
Respostas:
A partir da documentação :
Tipo | Comprimento máximo ----------- + ------------------------------------- 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
Observe que o número de caracteres que podem ser armazenados em sua coluna dependerá da codificação 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.
consulte a resposta da Ankan para obter mais detalhes.
Expansão da mesma resposta
ESTA É UMA TABELA DE ESTIMATIVA ÁSPERA PARA DECISÕES 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 também a resposta de Chris V: https://stackoverflow.com/a/35785869/1881812
TINYTEXT
conta 1 byte + 8 byte no tamanho do registro, enquanto um VARCHAR(255)
conta de 1 byte + 255 byte até 2 byte + 1020 byte (caracteres UTF-8 de 4 bytes) no tamanho do registro.
Diante do desafio de @ Ankan-Zerob, esta é a minha estimativa do tamanho máximo que pode ser armazenado em cada tipo de texto medido em palavras :
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
Em inglês , provavelmente 4,8 letras por palavra é provavelmente uma boa média (por exemplo, norvig.com/mayzner.html ), embora o tamanho das palavras varie de acordo com o domínio (por exemplo, idioma falado e trabalhos acadêmicos), portanto não faz sentido ser muito preciso. O inglês é principalmente caracteres ASCII de byte único, com caracteres de vários bytes muito ocasionais, tão próximos de um byte por letra. Um caractere extra deve ser permitido para espaços entre palavras, por isso arredondei para baixo de 5,8 bytes por palavra. Idiomas com muitos sotaques, como dizer polonês, armazenariam um pouco menos palavras, como faria, por exemplo, alemão com palavras mais longas.
Os idiomas que exigem caracteres de vários bytes , como grego, árabe, hebraico, hindi, tailandês, etc, etc, geralmente requerem dois bytes por caractere em UTF-8. Adivinhando descontroladamente 5 letras por palavra, reduzi de 11 bytes por palavra.
Scripts CJK (Hanzi, Kanji, Hiragana, Katakana, etc.) Não sei de nada; Acredito que os caracteres geralmente requerem 3 bytes em UTF-8 e (com simplificação maciça) eles podem ser considerados para usar cerca de 2 caracteres por palavra, portanto, eles estarão em algum lugar entre os outros dois. (Os scripts CJK provavelmente exigirão menos armazenamento usando UTF-16, dependendo).
Isso obviamente ignora as despesas gerais de armazenamento, etc.