Base de Conhecimento

Erro 1064 MySQL: erro de sintaxe SQL, como resolver

  • mysql, erro 1064, erro de sintaxe, sql, palavra reservada, importar banco
  • Usuários acharam útil: 0

Entenda o erro 1064 do MySQL, leia o near e o at line da mensagem, ache a causa de sintaxe e corrija com exemplos de comando errado e certo.

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: Erro 1064 MySQL: erro de sintaxe SQL, como resolver

Capa da Redação Eleven Host para o guia: Erro 1064 MySQL: erro de sintaxe SQL, como resolver Arte: Eleven Host

O erro 1064 MySQL significa que o servidor não entendeu o comando SQL: há um erro de sintaxe. A mensagem mostra, depois de near, o trecho onde ele se perdeu, e o at line informa a linha. O defeito está ali ou logo antes.

Este guia ensina a ler essa mensagem, lista causas de sintaxe, mostra exemplos de comando errado e certo e trata o caso do erro ao importar um backup. Os fatos vêm do manual do MySQL 8.4, nas páginas de mensagens de erro, palavras reservadas, nomes de objetos e programas armazenados. Os nomes de banco e tabela dos exemplos são fictícios.

Como ler a mensagem do erro 1064

Segundo o manual, o erro 1064 tem o símbolo ER_PARSE_ERROR, o SQLSTATE 42000 e o formato de mensagem %s near '%s' at line %d. Na prática, ele aparece assim, no exemplo do próprio manual:

ERROR 1064 (42000): You have an error in your SQL syntax ...

near 'interval (begin INT, end INT)'

A mensagem completa também traz o aviso "check the manual that corresponds to your MySQL server version for the right syntax to use", que manda conferir o manual da versão do seu servidor. Para ler o erro, siga estes passos:

  1. Olhe o trecho depois de near: o MySQL parou de entender exatamente ali. O defeito está nesse trecho ou um pouco antes.
  2. Veja o número depois de at line: é a linha do comando onde ele se perdeu. Em scripts longos, isso poupa tempo.
  3. Olhe a palavra logo antes do trecho: vírgula sobrando, parêntese ou aspas sem fechar, ou uma palavra reservada usada como nome podem estar ali.

Principais causas do erro 1064

O 1064 não quer dizer uma coisa só. Estas são as causas de sintaxe que você deve investigar:

  • Palavra reservada usada como nome: uma tabela ou coluna chamada order, group, key ou desc precisa de crase. O manual diz que palavras reservadas são aceitas como nome se você as colocar entre crases.
  • Aspas erradas ou sem fechar: valores de texto vão entre aspas simples. Aspas abertas e não fechadas, ou aspas curvas coladas de um editor de texto, quebram o comando.
  • Vírgula ou parêntese: uma vírgula sobrando antes do FROM, ou um parêntese que não fecha, derruba a sintaxe.
  • Versão diferente do MySQL: uma palavra que não era reservada numa versão pode ser em outra.
  • Falta do DELIMITER: ao criar procedures ou triggers pelo cliente mysql, o ponto e vírgula corta o comando no meio.

Palavra reservada e crase

O manual traz o exemplo que gera o 1064 e a versão corrigida:

CREATE TABLE interval (begin INT, end INT); -- ERROR 1064

CREATE TABLE `interval` (begin INT, end INT); -- Query OK

Segundo o manual, BEGIN e END são palavras-chave, mas não reservadas, então não exigem crase. Já INTERVAL é reservada e precisa dela. Conferimos na lista do MySQL 8.4 que estas são reservadas: ORDER, GROUP, KEY, DESC, SELECT, INTERVAL, RANK, LEAD, RECURSIVE, ROWS, SYSTEM, CUBE, FUNCTION, WINDOW e PARTITION. E estas não são: BEGIN, END, STATUS, USER e MANUAL. A crase é o caractere de aspas de identificadores, segundo o manual. Há uma exceção: uma palavra que vem depois de um ponto num nome qualificado, como mydb.interval, já é lida como nome e não precisa de crase.

Aspas simples para valores e crases para nomes

Valores de texto vão entre aspas simples, como 'Maria'. Nomes de tabela e coluna, quando precisam de proteção, vão entre crases. Para o manual, com o modo ANSI_QUOTES ligado os literais de texto precisam estar entre aspas simples. Se você trocar as pontas, o MySQL pode lê-las como nome, e o erro pode ser outro, como coluna desconhecida (1054).

O DELIMITER em procedures e triggers

O manual explica que o cliente mysql reconhece o ponto e vírgula como fim de comando, por isso é preciso redefinir o delimitador por um tempo. Sem isso, o cliente corta a procedure no primeiro ponto e vírgula e o servidor recebe um pedaço incompleto. O exemplo do manual:

delimiter //

CREATE PROCEDURE dorepeat(p1 INT)

BEGIN

SET @x = 0;

REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;

END

//

delimiter ;

Precisa de um banco de dados na nuvem? Veja o 11SQL Mini a partir de R$ 9,90/mês e confira na loja o que cada plano inclui. Ver o 11SQL

Exemplos de comando errado e certo

Veja dois casos de 1064 com a correção ao lado. Primeiro, a palavra reservada DESC como nome de coluna:

SELECT id, desc FROM produtos ORDER BY desc;

O MySQL entende desc como a palavra-chave e se perde. Com crase, o comando passa:

SELECT id, `desc` FROM produtos ORDER BY `desc`;

Segundo caso, o valor com aspas sem fechar:

INSERT INTO clientes (nome) VALUES ('Maria);

Fechando as aspas, o comando fica correto:

INSERT INTO clientes (nome) VALUES ('Maria');

Em cada caso, olhe o trecho depois de near e a palavra logo antes dele, como nos passos acima.

Nem todo 1064 vem de palavra reservada. Se o trecho depois de near não mostra uma palavra do manual, procure vírgula, parêntese e aspas antes de trocar nomes.

Erro 1064 ao importar um backup

O 1064 pode aparecer ao importar um arquivo .sql: o script tem muitos comandos e a mensagem informa a linha do que falhou. Use o at line para abrir o arquivo e achar o comando. O passo a passo da importação está em Importar banco de dados MySQL: passo a passo e erros comuns, e o backup em Backup MySQL com mysqldump: como fazer e restaurar.

Causas possíveis ao importar:

  • Versão diferente: o manual alerta que, ao subir de versão, vale olhar também as palavras reservadas futuras. Um script feito numa versão mais antiga pode usar como nome uma palavra que virou reservada na versão nova. Funções de janela como RANK, LEAD e WINDOW estão na lista de reservadas do 8.4. A solução é pôr crase nesses nomes no script.
  • Sintaxe que o destino não conhece: um arquivo gerado numa versão mais nova, ou em outro sistema de banco, pode ter comandos que o servidor de destino não entende.
  • Arquivo cortado ou editado: um download incompleto ou uma edição manual pode deixar um comando pela metade.
  • Procedures sem DELIMITER: se o arquivo cria rotinas, confirme que o delimiter está no script, como no exemplo do manual.

Corrija o ponto indicado, salve e importe de novo. Se o arquivo falha em outra linha, repita o processo: a mensagem mostra o próximo ponto com problema. Se o erro for de acesso e não de sintaxe, leia Erro 1045 MySQL: Access denied for user, como resolver.

Como evitar o erro 1064

  • Escolha nomes que não sejam palavras reservadas: prefira descricao a desc, e pedido_ordem a order.
  • Use crase quando o nome for reservado: se o sistema já existe e muda o nome, proteja as colunas na consulta.
  • Valores entre aspas simples: reconfira cada abertura e fechamento antes de rodar.
  • Teste num banco de teste: rode scripts novos num banco separado do de produção. Para criar um usuário só para esse teste, veja Criar usuário MySQL: como dar permissões com GRANT.
  • Confira a versão antes de importar: compare a versão de origem com a de destino e leia a lista de palavras reservadas do manual.
  • Leia a mensagem inteira: o near e o at line já apontam o local.

Checklist do 1064

  • Li o trecho depois de near e o número depois de at line.
  • Olhei a palavra logo antes do trecho apontado.
  • Conferi se algum nome de tabela ou coluna é palavra reservada e usei crase.
  • Verifiquei as aspas: texto entre aspas simples, todas fechadas.
  • Procurei vírgula sobrando e parêntese sem par.
  • Em procedure ou trigger, usei delimiter no cliente mysql.
  • Ao importar, comparei a versão de origem com a de destino.
  • Corrigi um ponto por vez e rodei de novo.

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

Perguntas frequentes

O erro 1064 vem só de palavra reservada?

Não. Palavra reservada é uma das causas. Vírgula, parêntese, aspas, versão e a falta do DELIMITER também geram o erro.

O que significa o near na mensagem?

É o trecho onde o MySQL deixou de entender o comando. O defeito está nele ou um pouco antes.

BEGIN e END precisam de crase?

Não. O manual diz que são palavras-chave, mas não reservadas, então podem ser nomes sem crase. Já INTERVAL, ORDER e DESC precisam.

Por que o 1064 aparece ao importar um arquivo SQL?

Porque o servidor de destino pode não aceitar um comando ou nome do arquivo, por diferença de versão ou por um trecho quebrado. A mensagem mostra a linha do problema.

Esta resposta lhe foi útil?

Artigos Relacionados