PDOException beim Erstellen der Tabelle: Basistabelle oder Ansicht nicht gefunden [geschlossen]

8

Ich habe Drupal auf MariaDB 5.5.33 ausgeführt. Wenn ich update.php ausführe (nach dem Upgrade von Drupal 6 auf Drupal 7.28), wird folgende Fehlermeldung angezeigt:

Fehlgeschlagen: PDOException: SQLSTATE [42S02]: Basistabelle oder Ansicht nicht gefunden: 1146 Tabelle 'webdb.location_country' existiert nicht: CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Primärschlüssel: ISO-Ländercode mit zwei Buchstaben ', nameVARCHAR (255) NOT NULL DEFAULT' 'COMMENT' Full Country Name ', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT' Von location.module verwaltete Länderdaten. '; Array () indb_create_table () (Zeile 2720 von /home/web/public_html/includes/database/database.inc).

Wenn ich versuche, Befehl auszuführen

CREATE TABLE {location_country} ( codeCHAR (2) NICHT NULL KOMMENTAR 'Primärschlüssel: ISO-Ländercode mit zwei Buchstaben', nameVARCHAR (255) NICHT NULL STANDARD '' KOMMENTAR 'Vollständiger Ländername', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Von location.module verwaltete Länderdaten.';

In phpMyAdmin erhalte ich eine Fehlermeldung

# 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von '{location_country} ( codeCHAR (2) NOT NULL COMMENT' Primärschlüssel: Zwei Buchstaben IS 'in Zeile 1

Aber ich konnte nicht herausfinden, wo das Problem liegt.

Tilia
quelle

Antworten:

6

Ich hatte das gleiche Problem, und in meinem Fall war das Problem die Datenbanktabellen-Engine: Standardmäßig ist es InnoDB und (aus einigen Gründen muss ich es immer noch nicht verstehen) Drupal meldet diesen Fehler.

Sie müssen das Datenbankmodul in MyISAM ändern. Zunächst müssen Sie sicher sein, dass die von Drupal zu erstellenden Tabellen MyISAM als Engine haben: In /includes/database/mysql/schema.inc, suchen createTableSql($name, $table)und ändern Sie InnoDB in MyISAM; Speichern Sie es dann.
Da Ihre Datenbank einige Tabellen enthält, müssen diese ebenfalls geändert werden. MyISAMExportieren Sie die Datenbank einfach als SQL-Datei, öffnen Sie sie in einem Texteditor und ersetzen Sie sie Engine=InnoDBdurch Engine=MyISAM. phpmyadminLöschen Sie nun auf dem Server alle Tabellen der DB und importieren Sie dort die neue .sqlDatei. Auf diese Weise sind alle Ihre Tabellen und die Tabellen, die von Drupal erstellt werden, MyISAM.

M ama D.
quelle
In der Tat lag das Problem im Motor. Ich habe die Tabelle als MyISAM erstellt. Ich habe es dann exportiert, do InnoDB geändert und versucht, es wieder zu importieren. Es hat nicht funktioniert. Also habe ich wie im Link beschrieben zu MyISAM gewechselt. Es scheint zu funktionieren. Vielen Dank.
Tilia
3

Da andere Antworten (einschließlich solcher, die in keiner Weise mit der InnoDB-Engine zu tun haben) auf Fragen zu dieser PDOException als Duplikate markiert sind und auf diese umleiten, ist dies vermutlich der kanonische Ort für Antworten zu diesem Problem.

Ich habe dies mehrmals bei der Deinstallation eines Moduls festgestellt, und die gesuchte Tabelle ist auf der Site nicht vorhanden (weil sie versehentlich gelöscht wurde, weil die Schemadefinition in .installoder aus einem anderen Grund einen Tippfehler enthält ).

Die einfachste Möglichkeit, dies zu beheben, besteht darin, das Datenbankaktualisierungsskript ( update.php) manuell auszuführen .

Nachdem Ihre Site wieder zum Leben erweckt wurde, sollten Sie versuchen, die Grundursache des Problems herauszufinden und zu beheben.

Freie Radikale
quelle
2

Bei Verwendung als Raw-SQL müssen Sie die geschweiften Klammern um den Tabellennamen entfernen.

z.B:

CREATE TABLE location_country ( `code` CHAR(2) NOT NULL COMMENT 'Primary Key: Two letter ISO Country Code', `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Full Country Name ', PRIMARY KEY (`code`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Country data managed by location.module.';
David Thomas
quelle
Interessant. Warum zeigt Drupal den SQL-Befehl mit falscher Sysntax an? Jedenfalls hat es nicht funktioniert. Es funktionierte in TEST DB, nicht in der gewünschten. Schließlich wurde die Lösung wie unten beschrieben auf die MyISAM-Engine umgestellt.
Tilia
Drupal fügt die geschweiften Klammern hinzu, um Tabellennamen zu erkennen und das Datenbankpräfix anzuwenden, bevor die Abfrage ausgeführt wird.
Sanzante
1

Dies ist die gleiche Fehlermeldung, die beim Verschieben von Drupal 7 von einem Entwicklungsstandort auf einen anderen Entwicklungsstandort auf meinem Laptop aufgetreten ist. Nachdem ich die Tabellen in der Drupal-Datenbank überprüft hatte, stellte ich fest, dass der vollständige SQL-Speicherauszug nicht importiert wurde (mit Adminer und der Option "Vom Server", adminer.sql).

Suchen Sie nach Drupal 7-Datenbanktabellen, die sich alphabetisch am Ende des SQL-Dumps befinden , z. B .: Benutzer * , Ansichten * , Webformular * , Workbench * , xmlsitemap * , um festzustellen , ob alles importiert wurde.

Ich habe drush sql-cli < database.sqlden SQL-Dump in die Drupal-Datenbank importiert, nachdem ich alle Datenbanktabellen mit gelöscht hatte drush sql-drop.

frederickjh
quelle