2011-08-09 63 views
6

我试图来用MS SQL Azure数据库创建一个数据库转储一个新的MySQL空数据库,我收到以下错误ERROR 1064(42000)在MySQL

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; Check the manual that corresponds to your MySQL server version for the right syntax to use near 'I ' at line 1

我使用mysqldump的执行此操作和使用命令类似于以下命令提示符:

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

Mysqldump花了大约30分钟来显示此错误消息。

+0

你能告诉第一对夫妇的转储文件的行(御史任何个人信息)。因为我们需要知道它与'l'意味着什么,为什么它会在那里发生错误。 – Manuel

+0

sql转储文件启动为:IF NOT EXISTS(SELECT * FROM ......... – siva636

回答

1

检查您的转储文件。开始时看起来像一个流浪的角色。 SQL不是全世界的标准,MySQL导入器期望MySQL友好的SQL。我敢打赌,你的出口商做了一些时髦的事情。

您可能需要对该文件进行一点处理才能使其与MySQL一起工作。

+0

sql转储文件启动为:IF NOT EXISTS(SELECT * FROM ......... – siva636

+0

I可以在很多地方看到文件中使用的关键字GO这个关键字是否与MySQL兼容? – siva636

6

你有一个特定的数据库中选择,像这样:

USE database_name 

除此之外,我想不出任何理由错误。

+0

我使用了类似于我发布的命令(是的,我指定了要填充的数据库名称) – siva636

2

我有这个,并且它的创建语法,改为--create选项和生活变得美好

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

这很好地恢复。

+2

什么那创建选项实际上意味着什么? – siva636

+0

它意味着“创建数据库”。 – frandroid

1

我遇到过这个问题 - 对我来说,在我的转储文件开始处删除所有注释掉的行就是解决问题的方法。看起来这是一个空白错误。

-5
ERROR 1064 (42000) at line 1: 

这个错误是很常见的。发生此错误的主要原因是:用户意外编辑或错误编辑.sql文件。

5

(对于那些来自搜索引擎的问题),请检查您的存储过程是否声明了自定义分隔符,因为这是您在引擎无法确定如何终止语句时可能会看到的错误:

ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line…

如果你有一个数据库转储,看看:

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 ; 

用自定义 DELIMITER
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; 

尝试包装

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); 

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'); 
3

对我来说,我有一个

create table mytable ( 
    dadada 
) 

并忘了最后的分号。

所以看起来像这样的错误可能发生在简单的语法错误之后。就像它说的那样..我猜你永远不会仔细阅读有用的编译器注释。

1

终于找到了解决办法。

首先将.sql文件转换为UTF8。

然后用这个命令

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

---根是用户名

---测试是数据库名称

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

---根是用户名

---测试是数据库名称

0

错误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 ; 
0

如果你的错误之前的行包含COMMENT ''要么填充在脚本中的注释或删除空评论的定义。我在MySQL Workbench生成的脚本中发现了这一点。

0

我得到这个错误

ERROR 1064 (42000)

,因为下载的文件.sql.tar不知何故损坏。再次下载并解压缩解决了这个问题。

0

我有这个错误,因为使用的MySQL/MariaDB的保留字:

INSERT INTO tablename (precision) VALUE (2)

应该

INSERT INTO tablename (`precision`) VALUE (2)

相关问题