#mysql
Вопрос:
Как мне передать путь к файлу outfile в MySQL? Я пробовал следующее. Это не работает.
Мой файл SQL
SET @query = CONCAT('SELECT *
FROM
`registered_user`
INTO OUTFILE ',@output_location,' FIELDS TERMINATED BY ','
LINES TERMINATED BY 'n'');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Моя команда командной строки
mysql -u root -p test -e "set @output_location= '/var/tmp/out.csv'; source test2.sql;"
Я получаю следующую ошибку
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 '/var/tmp/out.csv FIELDS TERMINATED BY ','
LINES TERMINATED BY '
'' at line 12
Это работает, если я даю только out.csv
. Но я не знаю, где хранится файл. Я пропустил какую-либо escape-последовательность в приведенной выше команде?
Об этой проблеме было сообщено MySQL. Но есть ли решение?
Комментарии:
1. Включите
select @query;
послеPREPARE stmt FROM @query;
и поделитесь результатом.
Ответ №1:
Вы можете просто выполнить отладку, выбрав запрос так select @query
, как он был создан.
concat
Попробуйте использовать двойные кавычки "
вместо одинарных кавычек '
, если у вас есть кавычки внутри. Это позволит избежать отсутствия '
того, что у вас есть прямо сейчас. И не забудьте экранировать n
, когда concat
нравится \n
SET @query = CONCAT("SELECT *
FROM
`registered_user`
INTO OUTFILE '",@output_location,"' -- you need to enclose path with quotes
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'");
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Комментарии:
1. спасибо, но запрос в порядке. Это работает, когда я жестко кодирую путь. Я не могу понять, как передать путь к файлу из командной строки. Я отредактировал вопрос с помощью ссылки. Надеюсь, это прояснит мой вопрос
2. Это работает. Не знаю, что ваш вопрос был отклонен. В любом случае спасибо @James