Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I output MySQL query results in CSV format?

Tags:

mysql

csv

quotes

Is there an easy way to run a MySQL query from the Linux command line and output the results in CSV format?

Here's what I'm doing now:

mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/        /,/g' | tee list.csv select id, concat("\"",name,"\"") as name from students EOQ 

It gets messy when there are a lot of columns that need to be surrounded by quotes, or if there are quotes in the results that need to be escaped.

like image 462
MCS Avatar asked Dec 10 '08 15:12

MCS


People also ask

How do I export data from database to CSV?

Go to "Object Explorer", find the server database you want to export in CSV. Right-click on it and choose "Tasks" > "Export Data" to export table data in CSV. Then, the SQL Server Import and Export Wizard welcome window pop up.


2 Answers

From Save MySQL query results into a text or CSV file:

SELECT order_id,product_name,qty FROM orders WHERE foo = 'bar' INTO OUTFILE '/var/lib/mysql-files/orders.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; 

Note: That syntax may need to be reordered to

SELECT order_id,product_name,qty INTO OUTFILE '/var/lib/mysql-files/orders.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM orders WHERE foo = 'bar'; 

in more recent versions of MySQL.

Using this command, columns names will not be exported.

Also note that /var/lib/mysql-files/orders.csv will be on the server that is running MySQL. The user that the MySQL process is running under must have permissions to write to the directory chosen, or the command will fail.

If you want to write output to your local machine from a remote server (especially a hosted or virtualize machine such as Heroku or Amazon RDS), this solution is not suitable.

like image 126
Paul Tomblin Avatar answered Sep 26 '22 22:09

Paul Tomblin


mysql your_database --password=foo < my_requests.sql > out.csv 

Which is tab-separated. Pipe it like that to get a true CSV (thanks to user John Carter):

... .sql | sed 's/\t/,/g' > out.csv 
like image 33
Stan Avatar answered Sep 25 '22 22:09

Stan