Base de Conhecimento

Erro 1146 MySQL: tabela não existe, como resolver

  • mysql, erro 1146, table doesn't exist, show tables, lower_case_table_names, banco de dados
  • Usuários acharam útil: 0

Entenda o erro 1146 do MySQL, confira o banco em uso, liste as tabelas com SHOW TABLES e veja por que maiúsculas e minúsculas contam no Linux.

Por Redação Eleven Host · @robson.direitodigital · 29 de outubro de 2026 · 7 min de leitura

Arte da Eleven Host: janela de terminal com o título sobre Erro 1146 MySQL

Capa da Redação Eleven Host para o guia: Erro 1146 MySQL: tabela não existe, como resolver Arte: Eleven Host

O erro 1146 MySQL, "Table doesn't exist", aparece quando uma consulta pede uma tabela que o servidor não encontra no banco em uso. Segundo o manual do MySQL 8.4, a mensagem traz o nome do banco e o da tabela, e os dois precisam ser conferidos.

Este guia mostra o que o erro significa, como ler a mensagem, como checar o banco selecionado e os nomes das tabelas com comandos SQL padrão e por que maiúsculas e minúsculas fazem diferença entre Windows e Linux. Os fatos vêm do manual do MySQL 8.4. Os exemplos usam nomes fictícios. Se o seu banco roda numa VPS, o guia completo de servidor VPS explica o que fica por sua conta.

O que o erro 1146 significa

No manual de erros do MySQL 8.4, o código 1146 tem o símbolo ER_NO_SUCH_TABLE, o estado SQL 42S02 e a mensagem Table '%s.%s' doesn't exist. Um exemplo do próprio manual:

ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

Em português simples: o servidor entendeu a consulta, mas não achou, no banco indicado, uma tabela com aquele nome. A senha e a conexão estão funcionando; o que falta é a tabela, ou o nome dela, ou o banco certo.

Como ler a mensagem: banco.tabela

A mensagem mostra dois nomes separados por um ponto: primeiro o banco, depois a tabela. No exemplo acima, test é o banco e no_such_table é a tabela. Confira os dois. Às vezes a tabela existe, mas em outro banco, e o erro vem de a consulta estar apontando para o banco errado.

No erro 1146, leia a mensagem inteira: o servidor informa o banco e a tabela que ele procurou, e a causa pode estar na diferença entre esse nome e o que existe.

Passo a passo para diagnosticar

Estes comandos SQL padrão ajudam a descobrir onde está a diferença. Rode no cliente mysql ou na ferramenta que você usa:

  1. Veja qual banco está em uso: SELECT DATABASE();
  2. Liste os bancos disponíveis: SHOW DATABASES;
  3. Selecione o banco que deveria ser usado: USE nome_do_banco;
  4. Liste as tabelas dele: SHOW TABLES;
  5. Procure por parte do nome: SHOW TABLES LIKE 'nome%';

Compare o resultado com o nome que aparece na mensagem de erro. Se a tabela está na lista com outro nome, o problema é de digitação ou de prefixo. Se ela não aparece em nenhum banco, ela pode não ter sido criada naquele servidor.

Precisa de um servidor próprio para o seu banco? A VPS Plano Bronze sai a partir de R$ 17,00/mês; confira na loja o que o plano inclui. Ver planos de VPS

Causas práticas do erro 1146

Estas são possibilidades a verificar, e não uma lista de frequência. Vale testar uma de cada vez:

  • Banco errado selecionado: o banco que está na string de conexão da aplicação, ou o selecionado com USE, não é aquele onde a tabela existe.
  • Nome digitado diferente: a diferença pode estar numa letra maiúscula ou num prefixo. Aplicações como o WordPress usam um prefixo de tabela definido na instalação, e a consulta precisa usar o mesmo prefixo.
  • Tabela não criada: a importação do banco pode ter falhado no meio, ou nem ter sido feita. Veja o guia Importar banco de dados MySQL: passo a passo e erros comuns.
  • Site migrado de Windows para Linux: os nomes escritos com maiúsculas podem se comportar de outro jeito, como explica a próxima seção.

Maiúsculas e minúsculas nos nomes de tabela

O manual do MySQL 8.4 explica que o nome da tabela é tratado de forma diferente conforme o sistema operacional:

  • no Windows, nomes de tabela não diferenciam maiúsculas de minúsculas;
  • na maioria dos sistemas Unix, diferenciam; a exceção é o macOS, em que o sistema de arquivos padrão (HFS+) não diferencia.

Esse comportamento é controlado pela variável lower_case_table_names, cujo valor padrão é 0 no Unix, 1 no Windows e 2 no macOS. Os valores significam:

  • 0: o nome é guardado como foi escrito e comparado com diferença entre maiúsculas e minúsculas;
  • 1: o nome é guardado em minúsculas e comparado sem diferença entre maiúsculas e minúsculas;
  • 2: valor para sistemas de arquivos que não diferenciam maiúsculas de minúsculas, como o macOS.

Um ponto importante: o manual diz que essa variável só pode ser configurada quando o servidor é inicializado, e que mudar o valor depois é proibido. Por isso, ela não é um ajuste rápido para corrigir um erro 1146 em um servidor que já está em uso.

O que fazer ao migrar de Windows para Linux

Se você trouxe um banco do Windows para um servidor Linux e a tabela existe, mas o erro continua, compare como o nome está escrito no banco e na consulta. O manual recomenda usar nomes de tabela em minúsculas. Para levar tabelas entre plataformas, ele cita como opção o lower_case_table_names=1 em todos os sistemas.

Para fazer a cópia com segurança antes de qualquer mudança, o guia Backup MySQL com mysqldump: como fazer e restaurar mostra como gerar o backup com mysqldump, e o Importar banco de dados MySQL: passo a passo e erros comuns mostra como importá-lo.

Entenda

Roteiro rápido para o erro 1146:

  1. Leia na mensagem o banco e a tabela procurados.
  2. Rode SELECT DATABASE(); para ver o banco em uso.
  3. Use SHOW TABLES; e SHOW TABLES LIKE 'nome%'; para ver os nomes que existem.
  4. Confira maiúsculas, minúsculas e o prefixo da aplicação.
  5. Se a tabela não existe, verifique se a importação terminou.

Se o erro for de outro tipo

Se o seu erro for de outro tipo: se a mensagem for de sintaxe, veja o Erro 1064 MySQL: erro de sintaxe SQL, como resolver. Se for de acesso negado, veja o Erro 1045 MySQL: Access denied for user, como resolver. Se o problema for a conexão com o servidor, veja o Erro 2002 MySQL: não conecta ao servidor, como resolver. Para dar permissões a um usuário no banco, há o Criar usuário MySQL: como dar permissões com GRANT.

Em sites que mostram a frase "Erro ao estabelecer conexão com o banco de dados", o caso é diferente do 1146 e tem o seu guia: Erro ao estabelecer conexão com o banco de dados: solução.

Como evitar o erro 1146 no futuro

  • Use nomes de tabela em minúsculas: é a recomendação do manual do MySQL 8.4.
  • Anote o prefixo de tabela da aplicação: ele é definido na instalação e precisa ser o mesmo nas consultas.
  • Confira o banco na string de conexão: um nome de banco trocado leva a procurar as tabelas no lugar errado.
  • Termine a importação antes de usar o site: uma importação interrompida pode deixar tabelas sem criar.
  • Faça backup antes de migrar: assim, se o nome das tabelas mudar de comportamento no novo sistema, você tem a cópia original.

Procura um serviço de banco de dados? O 11SQL Mini sai a partir de R$ 9,90/mês; confira na loja o que cada plano inclui. Ver planos de banco de dados

Perguntas frequentes

O que significa "Table doesn't exist" no MySQL?

Significa que o servidor não encontrou, no banco indicado, uma tabela com o nome pedido pela consulta. A mensagem traz o banco e a tabela procurados, no formato banco.tabela.

Como saber em qual banco estou?

Rode SELECT DATABASE();. O resultado mostra o banco selecionado. Para trocar, use USE nome_do_banco;.

Maiúsculas e minúsculas importam no nome da tabela?

Depende do sistema. No Windows, os nomes de tabela não diferenciam maiúsculas de minúsculas; na maioria dos sistemas Unix, diferenciam. O manual recomenda usar nomes em minúsculas.

Posso mudar o lower_case_table_names para resolver?

Essa variável só pode ser configurada quando o servidor é inicializado, e mudar o valor depois é proibido, segundo o manual do MySQL 8.4. Para levar tabelas entre plataformas, o manual cita o valor 1 em todos os sistemas como uma opção.

A tabela existe no meu backup, mas o erro continua. O que olhar?

Confira se a importação terminou, se o banco selecionado é o certo e se o nome da tabela, com o prefixo, está escrito exatamente como na consulta.

Esta resposta lhe foi útil?

Artigos Relacionados