[英]ERROR 1064 (42000) in MySQL
我试图使用从MS SQL Azure数据库创建的数据库转储填充新的MySQL空数据库,我收到以下错误
第1行的错误1064(42000):SQL语法中有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的“I”附近使用正确的语法
我使用mysqldump来执行此操作,并在命令提示符中使用类似于以下命令:
mysql --user=rootusername --pasword=password databasename < dumpfilename.sql
Mysqldump花了大约30分钟来显示此错误消息。
(对于那些从搜索引擎来到这个问题的人),检查你的存储过程是否声明了一个自定义分隔符,因为这是当引擎无法弄清楚如何终止语句时可能会看到的错误:
错误1064(42000)在第3行:您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在''在线附近使用正确的语法...
如果您有数据库转储,请参阅:
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;
尝试使用自定义DELIMITER
包装:
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 ;
您是否选择了特定的数据库:
USE database_name
除此之外,我无法想到出现此错误的任何原因。
对我来说,我有一个
create table mytable (
dadada
)
并在最后忘了分号。
所以看起来这个错误可能在简单的语法错误后发生。 就像它说..我想你永远不能仔细阅读有用的编译器评论。
我有这个,它是创建语法,改为--create-options,生活更好
mysqldump -u [user] -p -create-options [DBNAME] >[DumpFile].sql
而那恢复得很好。
终于得到了解决方案。
首先.sql文件转换为UTF8。
然后使用此命令
mysql -p -u root --default_character_set utf8 test </var/201535.sql
--- root是用户名
--- test是数据库名称
要么
mysql -p -u root test < /var/201535.sql
--- root是用户名
--- test是数据库名称
错误1064经常发生在丢失DELIMITER语句时,如:create function,create trigger ..确保在每个语句之前添加DELIMITER $$并以$$ DELIMITER结束它,如下所示:
DELIMITER $$
CREATE TRIGGER `agents_before_ins_tr` BEFORE INSERT ON `agents`
FOR EACH ROW
BEGIN
END $$
DELIMITER ;
我有这个错误,因为使用mysql / mariadb保留字:
INSERT INTO tablename (precision) VALUE (2)
应该
INSERT INTO tablename (`precision`) VALUE (2)
检查转储文件。 在开始时看起来像一个流浪的角色。 SQL不是世界的标准,MySQL导入器需要MySQL友好的SQL。 我愿意打赌你的出口商做了一些时髦的事情。
您可能需要按一下文件才能使它与MySQL一起使用。
我碰到了一次 - 对我来说,删除转储文件开头的所有注释掉的行是解决了问题的原因。 看起来这是一个空白错误。
这是我的情况:我忘了添加'
之前);
file.sql结束,错误:
...
('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);
file.sql结束,没有错误:
...
('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');
如果错误之前的行包含COMMENT ''
,则填充脚本中的注释或删除空注释定义。 我在MySQL Workbench生成的脚本中找到了这个。
我收到了这个错误
错误1064(42000)
因为下载的.sql.tar文件以某种方式被破坏了。 再次下载和解压缩解决了这个问题。
在查询中进行以下更改解决了此问题:
INSERT INTO table_name (`column1`, `column2`) values ('val1', 'val2');
请注意,列名称括在`(选项卡上方的字符)而不是引号中。
面对同样的问题。 事实上,在文件开头是错误的SQL,因为在转储时我做了:
mysqldump -u username --password=password db_name > dump.sql
哪个在文件的开头写了一些在stdout中的内容:
mysqldump:[警告]在命令行界面上使用密码可能不安全。
导致恢复提高该错误。
因此,删除SQL转储的第一行可以进行正确的还原。
看看原始问题中恢复的方式,转储的可能性与我的相似,导致在SQL文件中打印stdout警告(如果mysqldump正在打印它的话)。
ERROR 1064 (42000) at line 1:
这个错误很常见。 发生此错误的主要原因是:当用户意外编辑或错误编辑.sql文件时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.