web-dev-qa-db-ja.com

MySQLのエラー1064(42000)

MS SQL Azureデータベースから作成されたdbダンプを新しいMySQL空のデータベースに入力しようとすると、次のエラーが発生します

1行目のエラー1064(42000):SQL構文にエラーがあります。 MySQLサーバーのバージョンに対応するマニュアルで、1行目の「I」付近で使用する正しい構文を確認してください

私はmysqldumpを使用してこの操作を実行し、コマンドプロンプトで次のようなコマンドを使用しました。

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

Mysqldumpは、このエラーメッセージを表示するのに約30分かかりました。

9
siva636

(検索エンジンからこの質問にアクセスする場合)、エンジンがステートメントを終了する方法を理解できないときに表示される可能性があるエラーであるため、ストアドプロシージャがカスタム区切り文字を宣言していることを確認してください:

3行目のエラー1064(42000):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 ;
9
msanford

次のように特定のデータベースを選択していますか?

USE database_name

それを除いて、私はこのエラーの理由を考えることができません。

8
Manuel

私にとっては

create table mytable ( 
    dadada 
)

最後にセミコロンを忘れました。

したがって、このエラーは単純な構文エラーの後に発生する可能性があるように見えます。ちょうどそれが言うように..あなたは有用なコンパイラのコメントを十分に注意深く読むことは決してできないと思います。

3
Matthias

私はこれを持っていました、それは--create-optionsに変更されたcreate構文であり、人生はより良かったです

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

そして、それはうまく回復しました。

2
Monsters X

ダンプファイルを確認してください。最初は迷子のキャラクターのように見えます。 SQLは世界中の標準ではなく、MySQLインポーターはMySQLと相性の良いSQLを期待しています。私はあなたの輸出業者がファンキーな何かをしたことを喜んで賭けます。

MySQLで動作させるには、ファイルを少しマッサージする必要がある場合があります。

1
James Cronen

Mysql/mariadbの予約語を使用したため、このエラーが発生しました。

INSERT INTO tablename (precision) VALUE (2)

する必要があります

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

1
Aleksandras

エラー1064は、ステートメントの周りにDELIMITERがない場合によく発生します。

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

END $$
DELIMITER ; 
1
Adel Ben Hamadi

私はこれに一度遭遇しました-私にとっては、ダンプファイルの先頭にあるコメント化されたすべての行を削除することで問題が修正されました。空白エラーのようです。

1
tunesmith

ついに解決策を得た。

最初の.sqlファイルはUTF8に変換されます。

次に、このコマンドを使用します

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

--- rootはユーザー名です

--- testはデータベース名です

または

mysql -p -uルートテスト</var/201535.sql 

--- rootはユーザー名です

--- testはデータベース名です

1
Sanjit Majee

クエリを次のように変更すると、この問題は解決しました。

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

列名は引用符ではなく `(タブの上の文字)で囲まれていることに注意してください。

0
KayV

これは私のケースでした:'の前に);を追加するのを忘れていました

エラーのある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');
0
Jasom Dotnet

エラーの前の行にCOMMENT ''が含まれている場合は、スクリプトにコメントを入力するか、空のコメント定義を削除してください。これは、MySQL Workbenchによって生成されたスクリプトで見つかりました。

0
Don

このエラーが発生しました

エラー1064(42000)

ダウンロードされた.sql.tarファイルが何らかの理由で破損したためです。ダウンロードして解凍すると、問題は解決しました。

同じ問題に直面した。実際、ダンプするときに私がしたので、ファイルの先頭のSQLは間違っていました。

mysqldump -u username --password=password db_name > dump.sql

これは、ファイルの先頭にstdoutにあるものを書いています:

mysqldump:[警告]コマンドラインインターフェースでパスワードを使用すると、安全でない場合があります。

復元すると、そのエラーが発生します。

したがって、SQLダンプの最初の行を削除すると、適切な復元が可能になります。

元の質問で復元が行われた方法を見ると、ダンプが私の場合と同じように行われた可能性が高く、SQLファイルにstdout警告が出力されています(mysqldumpがそれを印刷していた場合)。

0
rels