Tenemos algunos ingenieros que aplanan una estructura db normalizada en una tabla temporal con el fin de generar un informe. Las columnas se especifican como TEXT NOT NULL
(sé "¿por qué están haciendo eso?"; Supongamos que estamos abordando esto).
Utilizamos MySQL 5.1.48 Community RHEL5 con el complemento InnoDB 1.0.9 en Linux.
Cuando usamos MyISAM nunca encontramos límites de tamaño de tabla de columnas máximas o longitud máxima de fila (durante la investigación hemos alcanzado el límite máximo de columnas en 2598 (el 2599 causa el error 1117). Con InnoDB estamos alcanzando límites. Estos límites se manifiestan al crear el tabla (sin inserción de datos) como:
ERROR 1118 (42000) en la línea 1: tamaño de fila demasiado grande. El tamaño máximo de fila para el tipo de tabla utilizado, sin contar BLOB, es 8126. Debe cambiar algunas columnas a TEXTO o BLOB
Estoy buscando respuestas a lo siguiente:
¿Cuál es la fórmula detallada para determinar el tamaño de fila particularmente cuando se usan lotes de columnas v / v / b / t? He probado algunos formatos diferentes usando
varchar(N)
columnas (donde N está entre 1 y 512), el juego de caracteres UTF8 (* 3) y tantas columnas como la tabla tomará hasta el fallo. Ninguno de los combos que he intentado proporciona valores que coincidan con los resultados reales de la prueba.¿Qué otra 'sobrecarga' debo considerar al calcular el tamaño de la fila?
¿Por qué el mensaje de error cambia de 8126 a 65535 cuando paso de crear tablas con columnas varchar (109) a columnas varchar (110)?