Fehlerbehebung

Konflikt mit der Drupal-Tabelle „system“ in MySQL 8 (Fehler 1064)

Geprüft am 4 Min. Lesezeit MySQL Kompatibilität

MySQL 8 hat die Liste der reservierten Wörter erweitert: Wörter, die zum Beispiel nicht als Tabellenname in einer Abfrage verwendet werden können, wenn sie nicht maskiert sind. Eines davon ist system, genau der Name einer Drupal-Tabelle.

Wenn Ihr Drupal kein Tabellenpräfix verwendet, sehen Sie mit MySQL 8 Fehler wie diesen, mit system in der fehlschlagenden Abfrage:

Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds

Drupal 6 und Drupal 7 erhalten keine Sicherheitsupdates mehr (bei Drupal 7 endeten sie im Januar 2025). Diese Korrekturen dienen dazu, die Website am Laufen zu halten, während Sie den Wechsel auf eine aktuelle Drupal-Version planen.

Drupal 7: auf 7.76 oder neuer aktualisieren

Drupal 7.76 hat die Unterstützung für MySQL 8 eingeführt und maskiert reservierte Namen selbst. Die Lösung ist also, auf die neueste Version des Zweigs 7 zu aktualisieren, 7.103. Ihre Version sehen Sie unter Berichte > Statusbericht.

Erstellen Sie ein Backup der Dateien und der Datenbank und aktualisieren Sie nach der in Drupal enthaltenen Datei UPGRADE.txt: Ersetzen Sie alle Dateien außer dem Ordner sites und der .htaccess, falls Sie sie geändert haben, und öffnen Sie danach tudominio.com/update.php.

Wenn Sie nicht aktualisieren können, wenden Sie die Korrektur aus dem folgenden Abschnitt mit der Syntax von Drupal 7 an.

Drupal 6 (oder nicht aktualisiertes Drupal 7): die Tabelle umbenennen und ein Präfix hinzufügen

Die Idee ist, die Tabelle system in einen Namen umzubenennen, der nicht reserviert ist, zum Beispiel tb_system, und Drupal mitzuteilen, dass diese Tabelle das Präfix tb_ hat.

  1. Erstellen Sie ein Backup der Datenbank.
  2. Öffnen Sie phpMyAdmin über cPanel, öffnen Sie die Tabelle system und benennen Sie sie in der Registerkarte Operationen in tb_system um.
  3. Bearbeiten Sie die Datei sites/default/settings.php.

Suchen Sie in Drupal 6 die Zeile:

$db_prefix = '';

Diese Zeile legt ein Präfix für alle Tabellen fest, akzeptiert aber auch ein array mit Präfixen nur für einige. Ändern Sie sie so:

$db_prefix = array(
    'default' => '',
    'system' => 'tb_',
);

In Drupal 7 steht das Präfix in $databases. Suchen Sie die Verbindung default und ändern Sie ihr prefix:

$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'usuario_drupal',
  'username' => 'usuario_drupal',
  'password' => 'tu-contraseña',
  'host' => 'localhost',
  'prefix' => array(
    'default' => '',
    'system' => 'tb_',
  ),
);

Behalten Sie Ihre Angaben zu Datenbank, Benutzer und Passwort bei; ändern Sie nur den Teil prefix.

Damit sucht Drupal die Tabelle system als tb_system, der Konflikt verschwindet und die Website funktioniert wieder mit MySQL 8.

Wenn es weiterhin fehlschlägt

Sehen Sie sich die vollständige Abfrage des Fehlers an. Wenn das Problem nicht mehr system ist, sondern ein anderes Wort, suchen Sie es in der Liste der reservierten Wörter von MySQL 8. Wenn es aus einem Modul stammt, aktualisieren Sie es oder korrigieren Sie es in seinen Dateien, indem Sie das Wort mit Backticks maskieren (`palabra`).

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.