![Requisitos de almacenamiento para la columna TEXTO de MySQL](https://rvso.com/image/1366212/Requisitos%20de%20almacenamiento%20para%20la%20columna%20TEXTO%20de%20MySQL.png)
Tengo una tabla MySQL llamada errormsg2
usando 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 backtrace
y 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) / rows
son 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