La tabella 'db.x' non esiste e Colonna sconosciuta: importa il file SQL

Uno script FiveM fallisce con 'Table doesn''t exist' o 'Unknown column'? Importa il suo file .sql con HeidiSQL o l'interfaccia CLI di mysql, scegli il database giusto ed esegui gli aggiornamenti.

La tua console mostra un errore di database, e lo script che l'ha causato smette di funzionare:

text
Table 'fivem.my_table' doesn't exist
Unknown column 'plate' in 'field list'

oxmysql mostra gli stessi errori come ER_NO_SUCH_TABLE e ER_BAD_FIELD_ERROR. Questo articolo copre cosa significano e come risolvere entrambi: importa il file SQL dello script nel database giusto ed esegui i suoi aggiornamenti.

Cosa significano i due errori

  • Table doesn't exist. Lo script chiede una tabella che non è mai stata creata nel database a cui il tuo server è connesso.
  • Unknown column. La tabella esiste, ma non ha una colonna con quel nome. La tabella viene da una versione precedente, o da un file SQL più vecchio.

In entrambi i casi lo script va bene. Il database non corrisponde a quello che lo script si aspetta.

Passo 1: trova il database giusto

Prima di importare qualcosa, controlla quale database usa il server. È l'ultima parte della stringa di connessione in server.cfg:

cfg
set mysql_connection_string "mysql://fivem:yourpassword@localhost/fivem?charset=utf8mb4"

Qui il database è fivem. Se importi in un altro, ad esempio test o mysql, lo script non vedrà le tabelle. Se la connessione stessa fallisce, inizia con oxmysql can't connect.

Passo 2: importa il file .sql

Trova il file nella cartella dello script. È denominato install.sql, database.sql, o dopo lo script. Aprilo prima in un editor di testo: se ha una riga USE some_database;, assicurati che corrisponda al tuo database o rimuovila.

Con HeidiSQL

  1. Apri la tua sessione e connetti.
  2. Nel riquadro sinistro, fai clic sul tuo database (ad esempio fivem), in modo che sia quello selezionato.
  3. Apri il menu File e scegli Run SQL file, quindi seleziona il file .sql.
  4. Aggiorna l'albero con F5, e le nuove tabelle appaiono sotto il database.

Con la riga di comando mysql

bash
mysql -u fivem -p fivem < /path/to/install.sql

Il secondo fivem è il nome del database. Su PowerShell di Windows, < non funziona nello stesso modo, quindi eseguilo da cmd, o usa HeidiSQL.

Con phpMyAdmin

Seleziona il database nell'elenco sinistro, apri la scheda Import, scegli il file ed eseguilo.

Attenzione: fai un backup del database prima di importare o alterare qualcosa. Un dump richiede secondi: mysqldump -u fivem -p fivem > backup.sql.

Passo 3: applica gli aggiornamenti e le migrazioni

Quando la tabella esiste ma una colonna manca, un aggiornamento l'ha aggiunta. Gli script lo gestiscono in due modi:

  • Un file di aggiornamento come update.sql. Esegui solo le istruzioni più recenti della versione che hai installato, poiché eseguire di nuovo quelle vecchie fallisce con Table ... already exists.
  • Una riga nella changelog o nella documentazione con l'ALTER TABLE da eseguire.

Un ALTER TABLE che aggiunge una colonna assomiglia a questo:

sql
ALTER TABLE `my_table` ADD COLUMN `plate` VARCHAR(12) NULL;

Alcuni script creano o alterano le loro tabelle di propria iniziativa quando si avviano. Se il tuo lo fa, riavvia lo script e osserva la console prima di fare qualcosa a mano.

Suggerimento: se l'errore appare solo per alcuni giocatori, guarda quale colonna nomina. Una colonna aggiunta in un aggiornamento spesso manca solo sui server che hanno aggiornato lo script senza eseguire l'aggiornamento.

Sensibilità maiuscole/minuscole su Linux

Su Linux, MariaDB e MySQL trattano i nomi delle tabelle come sensibili a maiuscole/minuscole per impostazione predefinita. Una tabella creata come Owned_Vehicles non viene trovata da una query per owned_vehicles, anche se funziona su un PC Windows.

La correzione è fare in modo che i nomi corrispondano, non cambiare l'impostazione del server:

sql
RENAME TABLE `Owned_Vehicles` TO `owned_vehicles`;

Mantieni i nomi delle tabelle in minuscolo quando le crei, e importa da un file con i nomi che lo script usa.

Anche le tabelle del framework mancano

Se la tabella mancante appartiene al framework, come users, jobs o owned_vehicles su ESX, o players su QBCore, il SQL base non è mai stato importato. Quel file viene fornito con il framework:

  • ESX Legacy: il file .sql dentro es_extended (e le sue risorse opzionali).
  • QBCore o QBox: il file .sql nel download del framework. Alcuni ricettari in txAdmin creano queste tabelle per te.

Uno script non può funzionare fino a quando le tabelle del framework stesso non esistono, quindi importale prima.

Pulisci gli avanzi

Dopo l'importazione, riavvia lo script in modo che legga le nuove tabelle:

text
restart my_script

Se lo stesso errore torna, leggilo di nuovo. Un nome di tabella o database diverso nel messaggio significa che hai risolto un problema e raggiunto il successivo. Quando una query di script è la causa, come leggere un errore di script FiveM ti aiuta a trovare il file e la riga.

Checklist

Sintomo Soluzione
Table 'db.x' doesn't exist Importa il file .sql dello script nel database da mysql_connection_string
Importato, ma ancora mancante Hai selezionato un altro database; controlla il nome in server.cfg
Unknown column Esegui l'aggiornamento o ALTER TABLE per la versione che hai installato
Table ... already exists all'importazione Hai eseguito il file di installazione due volte; esegui solo le istruzioni di aggiornamento
Funziona su Windows, fallisce su Linux I nomi delle tabelle sono sensibili a maiuscole/minuscole; rinomina in minuscolo
Tabelle del framework mancanti Importa il SQL base di ESX, QBCore o QBox per primo

Risposte rapide

Dov'è il file .sql di uno script?

Di solito nella cartella dello script, accanto a fxmanifest.lua, come install.sql, database.sql o un nome che corrisponde allo script. Se la pagina o la documentazione dello script menzionano una tabella, quel file è quello da importare.

Ho bisogno di importare di nuovo il file SQL quando aggiorno uno script?

Solo quando l'aggiornamento aggiunge una tabella o una colonna. Cerca un update.sql o una nota changelog, ed esegui solo le nuove istruzioni, poiché quelle vecchie falliranno su tabelle che già esistono.

Perché una tabella esiste sul mio PC ma non sul mio host Linux?

Linux tratta i nomi delle tabelle come sensibili a maiuscole/minuscole. Players e players sono due tabelle diverse lì, mentre Windows le tratta come la stessa.

Script senza questo problema

Item Creator V2Crea oggetti utilizzabili con animazioni, props, effetti e altro — senza scrivere codice.Vedi script →Shop CreatorCrea un negozio in meno di un minuto — proprietari, dipendenti, casseforti e rapine inclusi.Vedi script →

Continua a leggere