Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL - So umgehen Sie die Begrenzung der Zeilengröße von 66 KB

Die akzeptierte Antwort ist falsch (oder zumindest ziemlich eigensinnig) - ich persönlich möchte nicht, dass Daten außerhalb meiner Datenbank gespeichert werden, da dies zu Komplikationen in Bezug auf Sicherungsverfahren und Transaktionsabfragen führt.

Wie andere angemerkt haben, heißt es im Handbuch wiederholt, dass BLOB- und TEXT-Spalten nicht zur Gesamtzeilengröße zählen, aber leider stimmt das mit den Standardkonfigurationseinstellungen nicht, und Sie erhalten am Ende diese Fehlermeldung. (Die Fehlermeldung ergibt keinen Sinn, weil sie Ihnen sagt, dass Sie TEXT anstelle von VARCHAR verwenden sollen, um das Problem zu lösen – was Sie bereits tun.)

Der Grund für diese Einschränkung ist der Standardspeichermechanismus Antelope , das die ersten 768 Bytes der Spalten mit variabler Länge in der Zeile speichert - und eine mögliche Lösung besteht darin, INNODB zu verwenden und Ihren Speichermechanismus auf den alternativen Barracuda Speichermechanismus:

SET GLOBAL innodb_file_format=Barracuda;

Dies hat keine unmittelbaren Auswirkungen, da diese Einstellung eine Standardeinstellung für neue Datenbankdateien ist - Sie müssen also Ihre gesamte Datenbank löschen und neu erstellen.

Wechseln Sie alternativ zu Barracuda (wie oben) und dann (zusätzlich) zur Datei-pro-Tabelle-Strategie:

SET GLOBAL innodb_file_per_table=ON;

Auch dies hat keine unmittelbaren Auswirkungen, da beide Einstellungen Standardwerte für neue Tabellen sind - also müssen Sie die Tabelle wieder löschen und neu erstellen.

Wenn Sie danach im MySQL-Datenordner nachsehen, können Sie bestätigen, dass separate Dateien erstellt wurden, z. für eine Datenbank namens „data“ und eine Tabelle namens „test“ sollten Sie eine Datei namens „data/test/bigtable.ibd“ sehen.

Wenn Sie die globalen Einstellungen in MySQL nicht ändern möchten, versuchen Sie es mit SET SESSION statt SET GLOBAL , z.B. unmittelbar bevor Sie CREATE TABLE ausführen Aussagen.