Come appare il messaggio
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 1Cause frequenti
- Una parola riservata è usata come nome di colonna o tabella senza backtick, per esempio
order,key,rankogroups. - Il codice usa sintassi che esiste solo in MySQL 8 (
RETURNING, indici funzionali, window function su versioni vecchie) ma gira su MariaDB, o viceversa. - Nel
sql_modec'èANSI_QUOTES: le virgolette doppie diventano identificatori e non testo. - La query costruita a runtime è rotta: manca una virgola, un apice nel valore non è escapato o una parentesi è vuota.
- L'errore arriva da una migrazione o da un import; il contesto vero è nella riga precedente.
Verifica
- Versione del server e sql_mode
mysql -e "SELECT VERSION(), @@sql_mode;" - Leggi l'istruzione segnalata nel log con il contesto
grep -i -B2 -A2 'syntax' /var/log/mysql/error.log | tail -n 20 - Confronta versione server e client
mysql -e "SELECT VERSION()"; mysql --version
Soluzione
- Metti i nomi riservati tra backtick o rinominali:
orderdiventaorder_ref. È la causa più frequente. - Controlla la versione di destinazione: quello che gira su MySQL 8 in staging può fallire su MariaDB 10.11. Adatta la query o usa lo stesso motore.
- Con
ANSI_QUOTESscrivi i valori tra apici singoli e gli identificatori tra backtick. - Se la query è costruita a runtime, logga la stringa finale prima di inviarla: la virgola mancante salta fuori subito.
- Dopo la correzione riesegui la migrazione su una copia, non in produzione.
Domande frequenti
Perché funziona in staging e non in produzione?
Versioni o sql_mode diversi. Confronta SELECT VERSION(), @@sql_mode su entrambi.
Serve un aggiornamento?
Solo se la query è valida sulla nuova versione. L'upgrade non aggiunge i backtick mancanti.