Fehlermeldung der Datenbank "Row size too large"

Bei einem Contao Update bzw. beim Aktualisieren der Datenbank erscheint eine ähnliche Fehlermeldung wie diese im Logfile.

request.CRITICAL: Uncaught PHP Exception Doctrine\DBAL\Exception\DriverException: "An exception occurred while executing a query: SQLSTATE[42000]: Syntax error or access violation: 1118 Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs"

Was ist hierfür die Ursache?

Das Problem entsteht, weil die maximal erlaubte Anzahl an Felder in einer Tabelle überschritten wurde.

Lösungsansätze:

Das Problem ist bei Contao und im Internet bekannt. Es gibt dazu auch bereits entsprechende Tickets auf Github, um das Problem zu lösen:

Achtung

Bevor du jetzt weiter machst, erstelle unbedingt ein Backup der Datenbank!

Was kannst du aktuell selbst machen, um das Problem zu lösen? Hierzu hast du nachfolgende Möglichkeiten:

  • Versuche das Datenbankupdate über das Installtool bzw. über den Contao Manager. Je nachdem, was du bisher nicht probiert hast.
  • Versuche die Datenbankaktualisierung direkt über die Konsole und führe folgenden Befehl im Contao-Verzeichnis aus:
    php vendor/bin/contao-console contao:migrate

  • Aktiviere den Debugmodus, um herauszufinden, welche Tabelle betroffen ist. Den Debugmodus kannst du über den Contao Manager unter Systemwartung :: Debugmodus aktivieren. Anschließend erneut das Datenbankupdate über den Manager starten und die Fehlermeldung prüfen.
  • Wenn über den Debugmodus keine Tabelle angegeben wird, dann kannst du versuchen, jeden SQL-Befehl einzeln über das Tool phpMyAdmin auszuführen.
    Dazu kopierst du jede einzelne Anweisung aus dem Installtool bzw. Contao Manager in den phpMyAdmin und führst diese aus.

  • Irgendwann kommt dann die Fehlermeldung direkt nach dem Ausführen des SQL-Befehls und du weißt, welche Tabelle es betrifft.

  • Wenn du den Namen der betroffenen Tabelle kennst, dann versuche eine Optimierung durchzuführen.
    Dazu führst du über den phpMyAdmin den folgenden SQL-Befehl aus:
    OPTIMIZE TABLE tl_module
    (tl_module ist durch die entsprechende Tabelle mit dem Problem zu ersetzen).
    Im Anschluss versuchst du, das Datenbankupdate erneut.
  • Wenn z. B. tl_module betroffen ist, dann solltest du prüfen, ob unnötige Erweiterungen entfernt werden können. So kann es z. B. auch helfen, nicht benötigte Core-Erweiterungen wie das FAQ-Modul, Newsletter-Modul, usw. zu entfernen, um weniger Feld in der Tabelle zu haben.
  • Eine weitere Möglichkeit ist es, bei der Tabelle bestimmte Felder vom Datentyp blob auf den Datentyp text zu ändern. Das geht ebenfalls über den phpMyAdmin.

Häufig hilft eine der Maßnahmen um das Problem in den Griff zu bekommen.

Zuletzt aktualisiert am 25.01.2024 von Christian Feneberg.

Zurück