Fehlerbehebung
Konflikt mit der Drupal-Tabelle „system“ in MySQL 8 (Fehler 1064)
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.
- Erstellen Sie ein Backup der Datenbank.
- Öffnen Sie phpMyAdmin über cPanel, öffnen Sie die Tabelle
systemund benennen Sie sie in der Registerkarte Operationen intb_systemum. - 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
- PrestaShop: „An exception occurred while establishing a connection to figure out your platform version“ Lösung für den Fehler SQLSTATE[HY000] [2026] SSL_CTX_set_default_verify_paths failed beim Installier...
- Beschädigte Tabellen in einer MySQL-Datenbank Bestätigen Sie Fehler und Speicher-Engine einer Tabelle, bevor Sie sie reparieren, behalten Sie ein...
- Warum cPanel und phpMyAdmin unterschiedliche Größen für eine Datenbank anzeigen Erklärt, warum cPanel und phpMyAdmin unterschiedliche Größen berechnen, wie Sie große Tabellen finde...
- Einige Datenbanken erscheinen nicht in phpMyAdmin Prüfen Sie, ob die Datenbank zum Konto gehört, und fordern Sie eine Prüfung der Berechtigungen oder...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.