Ik heb een manier gevonden om die namen handmatig in te voeren, zolang je MySQL 5 of hoger gebruikt. Hier is het, geschreven als een bash-script om op een Unix-opdrachtregel te draaien:
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
Hoewel het niet de meest gracieuze oplossing is, weet ik zeker dat het in een enkele regel kan worden gecomprimeerd door iemand die SQL en/of bash een beetje beter kent dan ik...
Wat het doet is:
- gebruikt het informatieschema van MySQL om een lege CSV met kolomkoppen te maken
- voegt een extra nieuwe regel toe aan die lege CSV zodat uw gegevens als een nieuwe regel verschijnen
- gebruikt een vrij standaard "SELECT * INTO OUTFILE..."-query om een CSV vol gegevens te maken
- voegt het gegevensbestand toe aan het bestand met kolomkoppen
- verwijdert het (tijdelijke) gegevensbestand
Veel succes, en als je het opruimt, post dan je resultaten!