如何以CSV格式输出MySQL查询结果?

有没有简单的方法来从Linux命令行运行MySQL查询并以CSV格式输出结果?

这就是我现在正在做的事情:

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

当需要用引号包围很多列时,或者结果中有需要转义的引号时,它会变得杂乱无章。


从http://www.tech-recipes.com/rx/1475/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';

使用这个命令列名不会被导出。

还要注意/var/lib/mysql-files/orders.csv将在运行MySQL的服务器上。 运行MySQL进程的用户必须具有写入所选目录的权限,否则该命令将失败。

如果您想从远程服务器(特别是托管或虚拟化机器,如Heroku或Amazon RDS)将输出写入本地计算机,则此解决方案不适用。


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

哪个是制表符分隔的。 管它就是为了得到一个真正的CSV(谢谢@这里):

... .sql | sed 's/t/,/g' > out.csv

mysql --batch,-B

使用选项卡作为列分隔符打印结果,每行放在一个新行中。 使用这个选项,mysql不会使用历史文件。 批处理模式导致非表格输出格式和转义特殊字符。 通过使用原始模式可能会禁用转义; 请参阅--raw选项的说明。

这会给你一个制表符分隔的文件。 由于逗号(或包含逗号的字符串)不会被转义,因此将分隔符更改为逗号并不简单。

链接地址: http://www.djcxy.com/p/25117.html

上一篇: How to output MySQL query results in CSV format?

下一篇: Set NOW() as Default Value for datetime datatype?