La table db.x n'existe pas et Unknown column : importer le fichier SQL

Un script FiveM échoue avec Table doesn't exist ou Unknown column. Importez son fichier .sql avec HeidiSQL ou la CLI mysql, choisissez la bonne base de données, et exécutez les mises à jour.

Votre console affiche une erreur de base de données, et le script qui l'a provoquée arrête de fonctionner :

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

oxmysql affiche les mêmes erreurs que ER_NO_SUCH_TABLE et ER_BAD_FIELD_ERROR. Cet article couvre ce qu'elles signifient et comment corriger les deux : importer le fichier SQL du script dans la bonne base de données, et exécuter ses mises à jour.

Ce que les deux erreurs signifient

  • La table n'existe pas. Le script demande une table qui n'a jamais été créée dans la base de données à laquelle votre serveur est connecté.
  • Colonne inconnue. La table existe, mais elle n'a pas de colonne avec ce nom. La table provient d'une version plus ancienne, ou d'un fichier SQL plus ancien.

Dans les deux cas le script va bien. La base de données ne correspond pas à ce que le script attend.

Étape 1 : trouver la bonne base de données

Avant d'importer quoi que ce soit, vérifiez quelle base de données le serveur utilise. C'est la dernière partie de la chaîne de connexion dans server.cfg :

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

Ici la base de données est fivem. Si vous importez dans une autre, par exemple test ou mysql, le script ne verra pas les tables. Si la connexion elle-même échoue, commencez par oxmysql can't connect.

Étape 2 : importer le fichier .sql

Trouvez le fichier dans le dossier du script. Il s'appelle install.sql, database.sql, ou d'après le script. Ouvrez-le d'abord dans un éditeur de texte : s'il a une ligne USE some_database;, assurez-vous qu'elle correspond à votre base de données ou supprimez-la.

Avec HeidiSQL

  1. Ouvrez votre session et connectez-vous.
  2. Dans l'arborescence de gauche, cliquez sur votre base de données (par exemple fivem), de sorte qu'elle soit sélectionnée.
  3. Ouvrez le menu File et choisissez Run SQL file, puis choisissez le fichier .sql.
  4. Rafraîchissez l'arborescence avec F5, et les nouvelles tables apparaissent sous la base de données.

Avec la ligne de commande mysql

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

Le deuxième fivem est le nom de la base de données. Sur Windows PowerShell, < ne fonctionne pas de la même façon, donc exécutez-le à partir de cmd, ou utilisez HeidiSQL.

Avec phpMyAdmin

Sélectionnez la base de données dans la liste de gauche, ouvrez l'onglet Import, choisissez le fichier et exécutez-le.

Attention : sauvegardez la base de données avant d'importer ou de modifier quoi que ce soit. Une sauvegarde prend quelques secondes : mysqldump -u fivem -p fivem > backup.sql.

Étape 3 : appliquer les mises à jour et les migrations

Quand la table existe mais qu'une colonne manque, une mise à jour l'a ajoutée. Les scripts gèrent cela de deux façons :

  • Un fichier de mise à jour tel que update.sql. Exécutez uniquement les déclarations plus récentes que la version que vous avez installée, car exécuter les anciennes à nouveau échoue avec Table ... already exists.
  • Une ligne dans le changelog ou la documentation avec le ALTER TABLE à exécuter.

Un ALTER TABLE qui ajoute une colonne ressemble à ceci :

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

Certains scripts créent ou modifient leurs tables d'eux-mêmes au démarrage. Si le vôtre le fait, redémarrez le script et regardez la console avant de faire quoi que ce soit à la main.

Conseil : si l'erreur n'apparaît que pour certains joueurs, regardez quelle colonne elle nomme. Une colonne ajoutée dans une mise à jour manque souvent seulement sur les serveurs qui ont mis à niveau le script sans exécuter la mise à jour.

Sensibilité à la casse sur Linux

Sur Linux, MariaDB et MySQL traitent les noms de tables comme sensibles à la casse par défaut. Une table créée en tant que Owned_Vehicles n'est pas trouvée par une requête pour owned_vehicles, même si elle fonctionne sur un PC Windows.

La correction est de faire correspondre les noms, pas de changer le paramètre du serveur :

sql
RENAME TABLE `Owned_Vehicles` TO `owned_vehicles`;

Gardez les noms de tables en minuscules quand vous les créez, et importez à partir d'un fichier avec les noms que le script utilise.

Les tables du framework manquent aussi

Si la table manquante appartient au framework, comme users, jobs ou owned_vehicles sur ESX, ou players sur QBCore, le SQL de base n'a jamais été importé. Ce fichier est livré avec le framework :

  • ESX Legacy : le fichier .sql à l'intérieur de es_extended (et ses ressources optionnelles).
  • QBCore ou QBox : le fichier .sql dans le téléchargement du framework. Certaines recettes dans txAdmin créent ces tables pour vous.

Un script ne peut pas fonctionner jusqu'à ce que les propres tables du framework existent, alors importez celles-ci en premier.

Nettoyer les restes

Après l'importation, redémarrez le script pour qu'il lise les nouvelles tables :

text
restart my_script

Si la même erreur revient, relisez-la. Un nom de table ou de base de données différent dans le message signifie que vous avez corrigé un problème et atteint le suivant. Quand une requête de script est la cause, comment lire une erreur de script FiveM vous aide à trouver le fichier et la ligne.

Liste de contrôle

Symptôme Solution
Table 'db.x' doesn't exist Importez le fichier .sql du script dans la base de données de mysql_connection_string
Importé, mais toujours manquant Vous avez sélectionné une autre base de données ; vérifiez le nom dans server.cfg
Unknown column Exécutez la mise à jour ou ALTER TABLE pour la version que vous avez installée
Table ... already exists à l'importation Vous avez exécuté le fichier d'installation deux fois ; exécutez uniquement les déclarations de mise à jour
Fonctionne sur Windows, échoue sur Linux Les noms de tables sont sensibles à la casse ; renommez en minuscules
Les tables du framework manquent Importez d'abord le SQL de base ESX, QBCore ou QBox

Réponses rapides

Où se trouve le fichier .sql d'un script ?

Généralement dans le dossier du script, à côté de fxmanifest.lua, en tant que install.sql, database.sql ou un nom correspondant au script. Si la page du script ou la documentation mentionne une table, ce fichier est celui à importer.

Dois-je réimporter le fichier SQL quand je mets à jour un script ?

Seulement quand la mise à jour ajoute une table ou une colonne. Recherchez un update.sql ou une note de changelog, et exécutez uniquement les nouvelles déclarations, car les anciennes échoueront sur les tables qui existent déjà.

Pourquoi une table existe-t-elle sur mon PC mais pas sur mon hôte Linux ?

Linux traite les noms de tables comme sensibles à la casse. Players et players sont deux tables différentes là-bas, alors que Windows les traite comme identiques.

Des scripts sans ce problème

Item Creator V2Créez des items utilisables avec animations, props, effets et plus — sans écrire une ligne de code.Voir le script →Shop CreatorCréez un magasin en moins d’une minute — propriétaires, employés, coffres et braquages inclus.Voir le script →

À lire aussi