Wir haben einige Ingenieure, die eine normalisierte Datenbankstruktur in eine temporäre Tabelle reduzieren, um einen Bericht zu erstellen. Die Spalten sind wie folgt angegeben TEXT NOT NULL
(ich weiß, "warum machen sie das?"; Nehmen wir einfach an, dass wir dies ansprechen).
Wir verwenden MySQL 5.1.48 Community RHEL5 mit dem InnoDB Plug-In 1.0.9 unter Linux.
Bei der Verwendung von MyISAM sind wir nie auf Tabellengrößenbeschränkungen für maximale Spalten oder maximale Zeilenlänge gestoßen (während der Untersuchung haben wir die maximale Spaltenbeschränkung bei 2598 erreicht (die 2599. verursacht Fehler 1117). Mit InnoDB stoßen wir auf Grenzen. Diese Grenzen werden beim Erstellen der Tabelle (keine Dateneinfügung) als:
FEHLER 1118 (42000) in Zeile 1: Zeilengröße zu groß. Die maximale Zeilengröße für den verwendeten Tabellentyp ohne BLOBs beträgt 8126. Sie müssen einige Spalten in TEXT oder BLOBs ändern
Ich suche nach Antworten auf Folgendes:
Wie lautet die detaillierte Formel zur Bestimmung der Zeilengröße, insbesondere bei Verwendung von Partien mit v / v / b / t-Spalten? Ich habe einige verschiedene Formulare mit
varchar(N)
Spalten (wobei N zwischen 1 und 512 liegt), dem UTF8-Zeichensatz (* 3) und so vielen Spalten ausprobiert, wie die Tabelle bis zum Fehler benötigt. Keine der von mir versuchten Kombinationen liefert Werte, die mit den tatsächlichen Testergebnissen übereinstimmen.Welchen anderen Overhead muss ich bei der Berechnung der Zeilengröße berücksichtigen?
Warum ändert sich die Fehlermeldung von 8126 auf 65535, wenn ich von der Erstellung von Tabellen mit varchar (109) -Spalten zu varchar (110) -Spalten übergehe?