Передайте outfile FILE_PATH в качестве параметра при экспорте CSV из запроса MySQL

#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