Requisitos de armazenamento para coluna MySQL TEXT

Requisitos de armazenamento para coluna MySQL TEXT

Eu tenho uma tabela MySQL chamada errormsg2usando o mecanismo de armazenamento MyISAM com cerca de uma dúzia de colunas.

Duas dessas colunas que estimo representam a maior parte do espaço usado para cada linha e são do tipo de dados TEXT. Eles são backtracee msg.

Estou tentando estimar a quantidade de armazenamento necessária para cada linha e me deparei com a seguinte contradição:

show table status where name = 'errormsg2';mostra que (data_length + index_length) / rowssão cerca de 778 bytes por linha.

select avg( bit_length( em.backtrace ) + bit_length( em.msg ) ) / 8 from errormsg2 em;mostra uma média de 899 bytes de texto por linha apenas dessas duas colunas.

Como é possível que a tabela armazene mais dados do que utiliza? o que estou perdendo?

Responder1

Uma coisa a considerar são os problemas de codificação. UTF-8, por exemplo, usa 5 bytes para alguns caracteres. Se você não tiver dados, ou dados variáveis, o banco de dados será forçado a assumir o pior: que cada caractere pode ter 5 bytes de comprimento. Assim, pode alocar mais do que realmente precisa usar.

Observe que o UTF-16, embora supostamente tenha apenas 2 bytes, também pode ser vítima do mesmo tipo de problema: ele precisa codificar pares substitutos, que têm 4 bytes de comprimento. UTF-16 tem vários outros problemas ealgunsdefenda sempre o uso de UTF-8

informação relacionada