जब तक आप MySQL 5 या उच्चतर चला रहे हैं, तब तक मैंने उन नामों को मैन्युअल रूप से दर्ज करने का एक तरीका निकाला है। यहाँ इसे यूनिक्स कमांड लाइन पर चलने के लिए बैश स्क्रिप्ट के रूप में लिखा गया है:
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
जबकि सबसे सुंदर समाधान नहीं है, मुझे यकीन है कि इसे किसी ऐसे व्यक्ति द्वारा एक पंक्ति में संपीड़ित किया जा सकता है जो एसक्यूएल जानता है और/या मुझसे थोड़ा बेहतर बैश करता है...
यह क्या करता है:
- एक खाली CSV w/ कॉलम हेडर बनाने के लिए MySQL की सूचना स्कीमा का उपयोग करता है
- उस खाली सीएसवी में एक अतिरिक्त नई लाइन जोड़ता है ताकि आपका डेटा एक नई लाइन दिखाई देने लगे
- डेटा से भरा CSV बनाने के लिए एक सुंदर मानक "SELECT * INTO OUTFILE..." क्वेरी का उपयोग करता है
- डेटा फ़ाइल को फ़ाइल w/ कॉलम हेडर में जोड़ता है
- (अस्थायी) डेटा फ़ाइल को हटाता है
शुभकामनाएँ, और यदि आप इसे साफ़ करते हैं, तो अपने परिणाम पोस्ट करें!