web-dev-qa-db-fra.com

ERREUR 1064 (42000) dans MySQL

J'essaie de renseigner une nouvelle base de données MySQL vide avec un dump créé à partir de la base de données MS SQL Azure et j'obtiens le message d'erreur suivant.

ERREUR 1064 (42000) à la ligne 1: vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour le fichier bonne syntaxe à utiliser près de 'I' à la ligne 1

J'ai utilisé mysqldump pour effectuer cette opération et utilisé une commande semblable à celle-ci dans l'invite de commande:

mysql --user=rootusername --pasword=password databasename < dumpfilename.sql

Mysqldump a pris environ 30 minutes pour afficher ce message d'erreur.

9
siva636

Avez-vous une base de données spécifique sélectionnée comme ceci:

USE database_name

À part cela, je ne vois aucune raison pour cette erreur.

7
Manuel

(Pour ceux qui viennent à cette question à partir d'un moteur de recherche), vérifiez que vos procédures stockées déclarent un délimiteur personnalisé, car il s'agit de l'erreur que vous pouvez voir lorsque le moteur ne parvient pas à comprendre comment mettre fin à une instruction:

ERREUR 1064 (42000) à la ligne 3: vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour le fichier bonne syntaxe à utiliser près de '' à la ligne…

Si vous avez une base de données et voyez:

DROP PROCEDURE IF EXISTS prc_test;
CREATE PROCEDURE prc_test( test varchar(50))
BEGIN
    SET @sqlstr = CONCAT_WS(' ', 'CREATE DATABASE',  test, 'CHARACTER SET utf8 COLLATE utf8_general_ci');
    SELECT @sqlstr;
    PREPARE stmt FROM @sqlstr;
    EXECUTE stmt;
END;

Essayez d’emballer avec une DELIMITER personnalisée:

DROP PROCEDURE IF EXISTS prc_test;
DELIMITER $$
CREATE PROCEDURE prc_test( test varchar(50))
BEGIN
    SET @sqlstr = CONCAT_WS(' ', 'CREATE DATABASE',  test, 'CHARACTER SET utf8 COLLATE utf8_general_ci');
    SELECT @sqlstr;
    PREPARE stmt FROM @sqlstr;
    EXECUTE stmt;
END;
$$
DELIMITER ;
7
msanford

Pour moi j'ai eu un 

create table mytable ( 
    dadada 
)

et oublié le point-virgule à la fin. 

On dirait donc que cette erreur peut survenir après des erreurs de syntaxe simples. Tout comme il est dit .. Je suppose que vous ne pouvez jamais lire assez attentivement les commentaires utiles du compilateur.

3
Matthias

J'avais ceci, et c'était la syntaxe de création, changé en --create-options et la vie était meilleure

mysqldump -u [user] -p -create-options [DBNAME] >[DumpFile].sql

Et cela restauré bien.

2
Monsters X

Vérifiez votre fichier de vidage. On dirait un personnage errant au début. SQL n'est pas la norme dans le monde et l'importateur MySQL s'attend à un SQL convivial pour MySQL. Je suis prêt à parier que votre exportateur a fait quelque chose de génial.

Vous devrez peut-être traiter un peu le fichier pour qu'il fonctionne avec MySQL.

1
James Cronen

L'erreur 1064 se produit souvent lorsque l'instruction DELIMITER manquante, telle que: create function, create trigger ...__, est manquante. Assurez-vous d'ajouter DELIMITER $$ avant chaque instruction et terminez-la avec $$ DELIMITER like:

DELIMITER $$
CREATE TRIGGER `agents_before_ins_tr` BEFORE INSERT ON `agents`
  FOR EACH ROW
BEGIN

END $$
DELIMITER ; 
1
Adel Ben Hamadi

Je me suis heurté à cela une fois - pour moi, la suppression de toutes les lignes commentées au début de mon fichier de vidage est ce qui a résolu le problème. On dirait que c'était une erreur d'espacement.

1
tunesmith

Enfin obtenu une solution.

Le premier fichier .sql est converti en UTF8.

Puis utilisez cette commande

mysql -p -u root --default_character_set utf8 test </var/201535.sql

--- root est le nom d'utilisateur

--- test est le nom de la base de données

ou

mysql -p -u test de racine </var/201535.sql 

--- root est le nom d'utilisateur

--- test est le nom de la base de données

1
Sanjit Majee

Faire les changements suivants dans la requête a résolu ce problème:

INSERT INTO table_name (`column1`, `column2`) values ('val1', 'val2');

Notez que les noms de colonne sont placés entre `(caractère au-dessus de l’onglet) et non entre guillemets.

0
KayV

C'était mon cas: J'ai oublié d'ajouter ' avant );

Fin de file.sql avec erreur:

...
('node','ad','0','3879','3879','und','0','-14.30602','-170.696181','0','0','0'),
('node','ad','0','3880','3880','und','0','-14.30602','-170.696181','0','0','0);

Fin de file.sql sans erreur:

...
('node','ad','0','3879','3879','und','0','-14.30602','-170.696181','0','0','0'),
('node','ad','0','3880','3880','und','0','-14.30602','-170.696181','0','0','0');
0
Jasom Dotnet

Si la ligne précédant votre erreur contient COMMENT '', remplissez le commentaire dans le script ou supprimez la définition de commentaire vide. J'ai trouvé cela dans les scripts générés par MySQL Workbench.

0
Don

J'ai eu cette erreur 

ERREUR 1064 (42000)

parce que le fichier téléchargé .sql.tar était en quelque sorte corrompu. Le téléchargement et l'extraction à nouveau ont résolu le problème.