Die Tabellenspeicher-Engine für <TABLE> verfügt nicht über diese Option.
Dies ist der Fehler, den MySQL bei einer order by
Abfrage zurückgibt. Der Spaltentyp ist varchar(2000)
.
Abfrage:
select * from `dbo.table_1` order by textT;
Fehler zurückgegeben:
FEHLER 1031 (HY000): Die Tabellenspeicher-Engine für 'dbo.table_1' verfügt nicht über diese Option.
Warum passiert das? Und wie kann ich das beheben?
dbo
und Tabellennamentable_1
select * from `dbo`.`table_1` order by textT
max_length_for_sort_data
SHOW CREATE TABLE table_1
.Antworten:
Dieses Problem tritt anscheinend auf, wenn Sie eine Tabellendefinition importieren, die mit MyISAM erstellt wurde, aber später auf InnoDB umgestellt wurde. Die resultierenden
ROW_FORMAT
Optionen scheinen ungültig zu sein.Wenn Sie versuchen, eine exportierte Datenbank zu importieren und auf dieses Problem stoßen, können Sie einfach suchen und durch
ROW_FORMAT=FIXED
nichts ersetzen .Ich habe Folgendes verwendet, um dies sehr schnell zu tun:
Problem gelöst! Vielen Dank an jbrahy für den Hinweis, dass es das ROW_FORMAT war, das das Problem war.
BEARBEITEN: Aktualisiert, um für mehr Plattformen gemäß dem Vorschlag von @ Seven zu funktionieren
quelle
sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
Ich erhalte den gleichen Fehler, wenn ich eine Tabellendefinition importiere, die InnoDB mit ROW_FORMAT = DYNAMIC enthält. Die Tabelle wurde mit einer MyISAM-Engine erstellt, aber ich habe sie später auf InnoDB umgestellt. Als ich ROW_FORMAT = DYNAMIC aus der Anweisung create table entfernte und die Tabelle neu erstellte, funktionierte es einwandfrei. Meine Lösung für Ihr Problem wäre dies.
show create table `dbo.table_1`;
Nehmen Sie dann die Ausgabe dieses Befehls, entfernen Sie ROW_FORMAT = DYNAMIC und benennen Sie die Tabelle in um
dbo.table_1_old
rename table `dbo.table_1` to `dbo.table_1_old`;
Führen Sie dann die Anweisung create table ab dem ersten Schritt aus, d. H.
-- don't use this create as there are missing columns use yours create table `dbo.table_1` (textT VARCHAR(255));
Dann füllen Sie Ihre Tabelle mit den alten Daten neu.
insert into `dbo.table_1` select * from `dbo.table_1_old`;
Dann sollten Sie in der Lage sein, Ihr ursprüngliches SQL auszuführen
select * from `dbo.table_1` order by textT;
quelle
Sie können dies auch versuchen:
ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;
quelle
Dieses Problem tritt anscheinend auf, wenn Sie eine Tabellendefinition in MySQL 5.7 importieren, die mit MySQL 5.6 und früher erstellt wurde. Der gleiche Fehler kann durch die Option KEY_BUFFER_SIZE = 8192 und ähnliche Größen, die in Bytes für INNODB ENGINE definiert sind, erzeugt werden. Ich hatte diesen Fehler beim Importieren von Base aus SQL-Dump. Entscheidung: sed -ie 's / KEY_BLOCK_SIZE = 16384 // g' my-file-sql_dump.sql
quelle
Ich hatte dieses Problem und meine Sicherungsdatei war eine verschlüsselte
.zsql
Datei. Also habe ich my.cnf durch Hinzufügen geändertinnodb_strict_mode = off
. Es hat gut funktioniertquelle