#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 во временный файл, а затем удалить временный файл, когда закончите.