簡體   English   中英

MySQL中的錯誤1064(42000)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM