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.
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.
(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 ;
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.
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.
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.
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 ;
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.
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
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.
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');
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.
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.