Temos alguns engenheiros que nivelam uma estrutura de banco de dados normalizada em uma tabela temporária com o objetivo de gerar um relatório. As colunas são especificadas como TEXT NOT NULL
(eu sei "por que eles estão fazendo isso?"; Vamos apenas assumir que estamos tratando disso).
Usamos a Comunidade RHEL5 do MySQL 5.1.48 com o plug-in 1.0.9 do InnoDB no Linux.
Ao usar o MyISAM, nunca encontramos limites de tamanho de tabela de colunas máximas ou comprimento máximo de linhas (durante a investigação, atingimos o limite máximo de colunas em 2598 (o 2599 causa o erro 1117). Com o InnoDB, estamos atingindo limites. Esses limites se manifestam ao criar o tabela (sem inserção de dados) como:
ERRO 1118 (42000) na linha 1: tamanho da linha muito grande. O tamanho máximo da linha para o tipo de tabela usado, sem contar os BLOBs, é 8126. É necessário alterar algumas colunas para TEXT ou BLOBs
Estou procurando respostas para o seguinte:
Qual é a fórmula detalhada para determinar as partículas de tamanho de linha ao usar lotes de colunas v / v / b / t? Tentei alguns formulários diferentes usando
varchar(N)
colunas (onde N é entre 1 e 512), o conjunto de caracteres UTF8 (* 3) e quantas colunas a tabela levar até a falha. Nenhum dos combos que tentei fornece valores que correspondem aos resultados reais dos testes.Que outras 'despesas gerais' devo considerar ao calcular o tamanho da linha?
Por que a mensagem de erro muda de 8126 para 65535 quando passo de criar tabelas com colunas varchar (109) para varchar (110)?