ОШИБКА 1064 (42000) в MySQL - PullRequest
       47

ОШИБКА 1064 (42000) в MySQL

9 голосов
/ 09 августа 2011

Я пытаюсь заполнить новую пустую базу данных MySQL дампом базы данных, созданным из базы данных MS SQL Azure, и получаю следующую ошибку

ОШИБКА 1064 (42000) в строке 1: у вас естьошибка в вашем синтаксисе SQL;Проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса, чтобы использовать около 'I' в строке 1

Я использовал mysqldump для выполнения этой операции и использовал команду, подобную следующей в командной строке:

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

Mysqldump потребовалось около 30 минут, чтобы отобразить это сообщение об ошибке.

Ответы [ 15 ]

8 голосов
/ 21 апреля 2015

(для тех, кто приходит на этот вопрос из поисковой системы), убедитесь, что ваши хранимые процедуры объявляют пользовательский разделитель, так как это ошибка, которую вы можете увидеть, когда механизм не может понять, как завершить оператор:

ОШИБКА 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 ;
8 голосов
/ 10 августа 2011

У вас есть конкретная база данных, выбранная так:

USE database_name

Кроме того, я не могу придумать причину этой ошибки.

3 голосов
/ 07 декабря 2015

Для меня у меня было

create table mytable ( 
    dadada 
)

и забыл точку с запятой в конце.

Похоже, эта ошибка может возникнуть после простых синтаксических ошибок. Точно так же, как сказано ... Я думаю, вы никогда не сможете прочитать достаточно полезные комментарии компилятора.

2 голосов
/ 13 сентября 2011

У меня было это, и это был синтаксис создания, измененный на --create-options, и жизнь стала лучше

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

И это прекрасно восстановилось.

1 голос
/ 10 февраля 2018

У меня была эта ошибка из-за использования зарезервированных слов mysql / mariadb:

INSERT INTO tablename (precision) VALUE (2)

должно быть

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

1 голос
/ 29 сентября 2017

Ошибка 1064 часто возникает, когда отсутствует оператор DELIMITER вокруг оператора, например: создать функцию, создать триггер. Обязательно добавляйте DELIMITER $$ перед каждым оператором и заканчивайте его $$ DELIMITER следующим образом:

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

END $$
DELIMITER ; 
1 голос
/ 11 апреля 2016

Наконец-то есть решение.

Первый файл .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 - это имя базы данных

1 голос
/ 25 марта 2012

Я столкнулся с этим один раз - для меня, удаление всех закомментированных строк в начале моего файла дампа - это то, что решило проблему.Похоже, это была ошибка с пробелами.

1 голос
/ 09 августа 2011

Проверьте файл дампа. Выглядит как бездомный персонаж в начале. SQL не является стандартным в мире, и импортер MySQL ожидает, что MySQL будет дружественным к SQL. Я готов поспорить, что ваш экспортер сделал что-то напуганное.

Возможно, вам придется немного помассировать файл, чтобы он работал с MySQL.

0 голосов
/ 09 июля 2019

Столкнулся с той же проблемой.На самом деле это был неправильный SQL в начале файла, потому что при выводе я сделал:

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

, который написал в начале файла что-то, что было в stdout, которое было:

mysqldump: [Предупреждение] Использование пароля в интерфейсе командной строки может быть небезопасным.

В результате восстановления возникает эта ошибка.

Таким образом, удаляя первую строку дампа SQLобеспечивает правильное восстановление.

Глядя на то, как восстановление было выполнено в исходном вопросе, есть большая вероятность, что дамп был выполнен так же, как мой, вызывая печать предупреждения stdout в файле SQL (если вообще когда-либо mysqldump)печатал его тогда).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...