как добавить свойства с кавычками в дизайн запроса MySQL для вывода CSV

#mysql #csv #quotes #double-quotes #export-to-csv

#mysql #csv #кавычки #двойные кавычки #экспорт в csv

Вопрос:

Я пытаюсь вывести SQL-запрос в CSV-файл, но я не могу добавить два параметра, которые помогут мне его настроить. Вот часть запроса, которая работает хорошо:

 mysql --host=localhost --user=root --password=pass --quick -e 'SELECT * FROM DB.TABLE' > '/stupidpath withaspace/stuff/myrep/export.csv' 
  

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

 FIELDS TERMINATED BY ','
  

и

 ENCLOSED BY '"'
  

Как я могу это интегрировать?

Ответ №1:

Вероятно, самый простой способ — поместить экспортируемый SQL в отдельный файл, а затем передать его в mysql . Файл SQL, exporter.sql , будет выглядеть следующим образом:

 SELECT * INTO OUTFILE '/stupidpath withaspace/stuff/myrep/export.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
FROM DB.TABLE;
  

А затем запустить его с:

 mysql --host=localhost --user=root --password=pass --quick < exporter.sql
  

Помещение SQL в отдельный файл позволяет избежать обычных проблем с экранированием и цитированием при попытке отправить кавычки во что-либо из командной строки.

Комментарии:

1. Спасибо, я уже взглянул на свойство OUTFILE, но оно работает только один раз, мне нужно запускать этот запрос в list один раз в день (это будет задание php cron)

2. @krifur: тогда у вас было бы еще больше проблем с цитированием из-за того, что оболочка и PHP сражались друг с другом 🙂 Вы могли бы проделать вышеописанное с помощью heredoc на PHP, который вводился бы в mysql стандартный ввод, или поручить вашему заданию PHP cron записать SQL во временный файл, а затем удалить временный файл, когда закончите.