Tôi đã tìm ra cách xung quanh việc phải nhập những tên đó theo cách thủ công miễn là bạn đang chạy MySQL 5 trở lên. Nó đây, được viết dưới dạng tập lệnh bash để chạy trên dòng lệnh unix:
DBNAME=<database_name>
TABLE=<table_name>
FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv
#(1)creates empty file and sets up column names using the information_schema
mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = '$TABLE';" | awk '{print $1}' | grep -iv ^COLUMN_NAME$ | sed 's/^/"/g;s/$/"/g' | tr '\n' ',' > $FNAME
#(2)appends newline to mark beginning of data vs. column titles
echo "" >> $FNAME
#(3)dumps data from DB into /var/mysql/tempfile.csv
mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE '/var/mysql/tempfile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' FROM $TABLE;"
#(4)merges data file and file w/ column names
cat /var/mysql/tempfile.csv >> $FNAME
#(5)deletes tempfile
rm -rf /var/mysql/tempfile.csv
Mặc dù không phải là giải pháp duyên dáng nhất nhưng tôi chắc chắn rằng nó có thể được nén thành một dòng bởi một người biết SQL và / hoặc giỏi hơn tôi một chút ...
Những gì nó làm là:
- sử dụng lược đồ thông tin của MySQL để tạo tiêu đề CSV w / cột trống
- nối thêm một dòng mới vào CSV trống đó để dữ liệu của bạn sẽ bắt đầu xuất hiện một dòng mới
- sử dụng truy vấn khá chuẩn "SELECT * INTO OUTFILE ..." để tạo CSV đầy dữ liệu
- nối tệp dữ liệu vào tệp w / tiêu đề cột
- xóa tệp dữ liệu (tạm thời)
Chúc bạn may mắn và nếu bạn làm sạch nó, hãy đăng kết quả của bạn!