Die Tabellenspeicher-Engine für <TABLE> verfügt nicht über diese Option bei Bestellung nach Abfrage (FEHLER 1031).

79

Die Tabellenspeicher-Engine für <TABLE> verfügt nicht über diese Option.

Dies ist der Fehler, den MySQL bei einer order byAbfrage 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?

Umair Iqbal
quelle
Verwenden Sie separate Backticks für Datenbanknamen dbound Tabellennamentable_1
Ravinder Reddy
Aussage sollte aussehen wieselect * from `dbo`.`table_1` order by textT
Ravinder Reddy
max_length_for_sort_data
Kann
Überprüfen Sie dies: dev.mysql.com/doc/refman/5.0/en/example-storage-engine.html
Stanislovas Kalašnikovas
2
Sie haben drei wichtige Informationen ausgelassen, und keiner der Kommentatoren hat nach ihnen gefragt. - Welche Version von MySQL? Welcher Speichermotor? Stellen Sie zur Verfügung SHOW CREATE TABLE table_1.
Rick James

Antworten:

171

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_FORMATOptionen 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=FIXEDnichts ersetzen .

Ich habe Folgendes verwendet, um dies sehr schnell zu tun:

sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql

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

jhaagsma
quelle
Das hat bei mir funktioniert, ich konnte nicht aus einer Dump-Datei importieren und jetzt wird es importiert.
Blackwood
netter Quickie! hat mich gerettet
Tim Kretschmer
2
@haagsma schlägt vor, für "-ie" anstatt nur sed -e zu bearbeiten. -ie funktioniert sowohl mit GNU- als auch mit BSD-Versionen von sed. Ich bin os osx und -i arbeitet anders)sed -ie 's/ROW_FORMAT=FIXED//g' backup.sql
sieben
3
Wenn @jbrahy auf das Problem hinwies, sollte er dann nicht die Antwort erhalten? Scheint seltsam, dass er 4 Punkte hat und Sie 32 haben, als seine die richtige Antwort war.
Johnny 3653925
Ich denke, dieser Fehler wird meistens beim Importieren eines Backups ausgelöst. und da dies der schnellste Weg ist, um das Problem in diesem Fall zu beheben ... Ich kann meine Antwort bearbeiten, um einige weitere Details des Problems aufzunehmen.
Jhaagsma
11

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;
jbrahy
quelle
10

Sie können dies auch versuchen:

ALTER TABLE `dbo.table_1` ROW_FORMAT = DEFAULT ;
Michele Manzato
quelle
Vielen Dank, dies hat perfekt für mich funktioniert und mir erspart, mehrere Tabellen voller Fremdschlüssel neu zu erstellen.
Ian
2

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

ANF-67
quelle
1

Ich hatte dieses Problem und meine Sicherungsdatei war eine verschlüsselte .zsqlDatei. Also habe ich my.cnf durch Hinzufügen geändert innodb_strict_mode = off. Es hat gut funktioniert

prgmrDev
quelle