Requisitos de almacenamiento para la columna TEXTO de MySQL

Requisitos de almacenamiento para la columna TEXTO de MySQL

Tengo una tabla MySQL llamada errormsg2usando el motor de almacenamiento MyISAM con aproximadamente una docena de columnas.

Calculo que dos de esas columnas representan la mayor parte del espacio utilizado para cada fila y son de tipo de datos TEXTO. Ellos son backtracey msg.

Estoy tratando de estimar la cantidad de almacenamiento requerido para cada fila y encontré la siguiente contradicción:

show table status where name = 'errormsg2';muestra que (data_length + index_length) / rowsson aproximadamente 778 bytes por fila.

select avg( bit_length( em.backtrace ) + bit_length( em.msg ) ) / 8 from errormsg2 em;muestra un promedio de 899 bytes de texto por fila solo de estas dos columnas.

¿Cómo es posible que la tabla almacene más datos de los que utiliza? ¿Qué me estoy perdiendo?

Respuesta1

Una cosa a considerar son los problemas de codificación. UTF-8, por ejemplo, utiliza 5 bytes para algunos caracteres. Si no tiene datos o datos variables, la base de datos se ve obligada a asumir lo peor: que cada carácter podría tener 5 bytes de longitud. Por lo tanto, puede asignar más de lo que realmente necesita utilizar.

Tenga en cuenta que UTF-16, aunque supuestamente solo tiene 2 bytes, también puede sufrir el mismo tipo de problemas: tiene que codificar pares sustitutos, que tienen 4 bytes de longitud. UTF-16 tiene muchos otros problemas yalgunoAbogar por el uso siempre de UTF-8

información relacionada