Tabela 'db.x' não existe e coluna desconhecida: importe o arquivo SQL

Um script FiveM falha com Tabela não existe ou Coluna desconhecida? Importe seu arquivo .sql com HeidiSQL ou a CLI mysql, escolha o banco de dados certo e execute as atualizações.

Seu console mostra um erro de banco de dados, e o script que o causou para de funcionar:

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

oxmysql mostra os mesmos erros como ER_NO_SUCH_TABLE e ER_BAD_FIELD_ERROR. Este artigo cobre o que eles significam e como corrigir ambos: importe o arquivo SQL do script no banco de dados certo e execute suas atualizações.

O que os dois erros significam

  • Tabela não existe. O script pede uma tabela que nunca foi criada no banco de dados a que seu servidor está conectado.
  • Coluna desconhecida. A tabela existe, mas não tem uma coluna com aquele nome. A tabela veio de uma versão mais antiga, ou um arquivo SQL mais antigo.

Em ambos os casos o script está bem. O banco de dados não corresponde ao que o script espera.

Passo 1: encontre o banco de dados certo

Antes de importar qualquer coisa, verifique qual banco de dados o servidor usa. É a última parte da string de conexão em server.cfg:

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

Aqui o banco de dados é fivem. Se você importar em outro, por exemplo test ou mysql, o script não verá as tabelas. Se a própria conexão falhar, comece com oxmysql não consegue conectar.

Passo 2: importe o arquivo .sql

Encontre o arquivo na pasta do script. Ele se chama install.sql, database.sql, ou após o script. Abra-o em um editor de texto primeiro: se tiver uma linha USE some_database;, certifique-se de que corresponda ao seu banco de dados ou remova-a.

Com HeidiSQL

  1. Abra sua sessão e conecte.
  2. Na árvore esquerda, clique no seu banco de dados (por exemplo fivem), para que seja o selecionado.
  3. Abra o menu Arquivo e escolha Executar arquivo SQL, depois escolha o arquivo .sql.
  4. Atualize a árvore com F5, e as novas tabelas aparecem sob o banco de dados.

Com a linha de comando mysql

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

O segundo fivem é o nome do banco de dados. No Windows PowerShell, < não funciona da mesma forma, então execute-o de cmd, ou use HeidiSQL.

Com phpMyAdmin

Selecione o banco de dados na lista esquerda, abra a aba Importar, escolha o arquivo e execute-o.

Atenção: faça backup do banco de dados antes de importar ou alterar qualquer coisa. Um dump leva segundos: mysqldump -u fivem -p fivem > backup.sql.

Passo 3: aplique atualizações e migrações

Quando a tabela existe, mas uma coluna está faltando, uma atualização a adicionou. Os scripts lidam com isso de duas formas:

  • Um arquivo de atualização como update.sql. Execute apenas as instruções mais novas do que a versão que você instalou, já que executar as antigas novamente falha com Table ... already exists.
  • Uma linha no changelog ou nos documentos com o ALTER TABLE a executar.

Um ALTER TABLE que adiciona uma coluna fica assim:

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

Alguns scripts criam ou alteram suas tabelas por conta própria quando iniciam. Se o seu faz, reinicie o script e observe o console antes de fazer qualquer coisa à mão.

Dica: se o erro aparecer apenas para alguns jogadores, veja qual coluna ele nomeia. Uma coluna adicionada em uma atualização geralmente está faltando apenas em servidores que atualizaram o script sem executar a atualização.

Sensibilidade a maiúsculas e minúsculas no Linux

No Linux, MariaDB e MySQL tratam nomes de tabelas como sensíveis a maiúsculas por padrão. Uma tabela criada como Owned_Vehicles não é encontrada por uma query para owned_vehicles, mesmo que funcione em um PC Windows.

A correção é fazer os nomes corresponderem, não alterar a configuração do servidor:

sql
RENAME TABLE `Owned_Vehicles` TO `owned_vehicles`;

Mantenha nomes de tabelas em minúsculas quando criar, e importe de um arquivo com os nomes que o script usa.

As tabelas do framework também estão faltando

Se a tabela faltante pertencer ao framework, como users, jobs ou owned_vehicles no ESX, ou players no QBCore, o SQL base nunca foi importado. Esse arquivo vem com o framework:

  • ESX Legacy: o arquivo .sql dentro de es_extended (e seus recursos opcionais).
  • QBCore ou QBox: o arquivo .sql no download do framework. Algumas receitas no txAdmin criam essas tabelas para você.

Um script não pode funcionar até que as próprias tabelas do framework existam, então importe aquelas primeiro.

Limpe os restos

Depois de importar, reinicie o script para que leia as novas tabelas:

text
restart my_script

Se o mesmo erro voltar, leia-o novamente. Um nome de tabela ou banco de dados diferente na mensagem significa que você corrigiu um problema e chegou ao próximo. Quando uma query de script é a causa, como ler um erro de script FiveM ajuda você a encontrar o arquivo e a linha.

Lista de verificação

Sintoma Solução
Table 'db.x' doesn't exist Importe o arquivo .sql do script no banco de dados de mysql_connection_string
Importado, mas ainda falta Você selecionou outro banco de dados; verifique o nome em server.cfg
Unknown column Execute a atualização ou ALTER TABLE para a versão que instalou
Table ... already exists ao importar Você executou o arquivo de instalação duas vezes; execute apenas as instruções de atualização
Funciona no Windows, falha no Linux Nomes de tabelas são sensíveis a maiúsculas; renomeie para minúsculas
Tabelas do framework faltando Importe o SQL base de ESX, QBCore ou QBox primeiro

Respostas rápidas

Onde fica o arquivo .sql de um script?

Geralmente na pasta do script, ao lado de fxmanifest.lua, como install.sql, database.sql ou um nome que corresponda ao script. Se a página ou documentação do script mencionar uma tabela, esse arquivo é o a importar.

Preciso importar o arquivo SQL novamente quando atualizo um script?

Apenas quando a atualização adiciona uma tabela ou uma coluna. Procure por update.sql ou uma nota de changelog, e execute apenas as novas instruções, já que as antigas falharão em tabelas que já existem.

Por que uma tabela existe no meu PC, mas não no meu host Linux?

O Linux trata nomes de tabelas como sensíveis a maiúsculas. Players e players são duas tabelas diferentes lá, enquanto o Windows as trata como iguais.

Scripts sem esse problema

Item Creator V2Crie itens usáveis com animações, props, efeitos e muito mais — sem escrever código.Ver script →Shop CreatorMonte uma loja em menos de um minuto — donos, funcionários, cofres e assaltos inclusos.Ver script →

Continue lendo