So sieht die Meldung aus
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'order' at line 1Häufige Ursachen
- Ein reserviertes Wort wird ohne Backticks als Spalten- oder Tabellenname benutzt, zum Beispiel
order,key,rankodergroups. - Der Code nutzt Syntax, die nur MySQL 8 kennt (
RETURNING, Funktionsindizes, Fensterfunktionen in alten Versionen), läuft aber auf MariaDB – oder umgekehrt. ANSI_QUOTESsteckt imsql_mode: doppelte Anführungszeichen gelten dann als Bezeichner und nicht als Text.- Beim Zusammenbauen des SQL fehlt ein Komma, ein Hochkomma in einem Wert ist nicht escaped oder eine Klammer ist leer.
- Die Meldung kommt aus einer Migration oder einem Import; der echte Kontext steht in der Zeile davor.
Prüfen
- Version und sql_mode des Servers ansehen
mysql -e "SELECT VERSION(), @@sql_mode;" - Die gemeldete Stelle im Fehlerlog im Kontext lesen
grep -i -B2 -A2 'syntax' /var/log/mysql/error.log | tail -n 20 - Server- und Clientversion vergleichen
mysql -e "SELECT VERSION()"; mysql --version
Lösung
- Reservierte Wörter in Backticks setzen oder umbenennen:
orderwird zuorder_ref. Das ist die häufigste Ursache. - Zielversion prüfen: Was auf dem Testsystem mit MySQL 8 läuft, kann auf MariaDB 10.11 scheitern. Query anpassen oder gleiche Engine einsetzen.
- Bei
ANSI_QUOTES: Textwerte mit einfachen Hochkommas schreiben, Bezeichner mit Backticks. - Bei dynamisch gebautem SQL den fertigen String vor dem Absenden loggen – dann sieht man das fehlende Komma sofort.
- Nach dem Fix die Migration auf einer Kopie erneut laufen lassen, nicht direkt auf Produktion.
Häufige Fragen
Warum läuft das Statement auf dem Testserver und nicht in Produktion?
Unterschiedliche Versionen oder sql_mode. Vergleiche SELECT VERSION(), @@sql_mode auf beiden Systemen.
Hilft ein Upgrade?
Nur wenn die Query auf der neuen Version wirklich gültig ist. Ein Upgrade behebt keine fehlenden Backticks.