2011-01-04 14 views
12

可能性の重複:
How to export/dump a MySql table into a text file including the field names (aka headers or column names)MySQLは、列名が一番上にあるCSVテキストファイルにダンプしますか? OUTFILE INTO</p> <p>SELECT *ブランドFROM「E:

私はCSV形式のテキストファイルにテーブルをダンプするために、このSQLスニペットを使用/ブランド。 csv " "、 "ENCLOSED BY '"' '' '' '' ''によって終了される 「\ n」によって終了したフィールド

しかし、この方法では、CSVファイルの先頭に列名が追加されません。私の質問は、テーブルをエクスポートして「最初の行にフィールド名を入れる」を選択したときにphpMyAdminが行うように、すべてのカラム/フィールド名を選択する方法です。

+0

チェックこのアウト(それが回避策です):[最初の行の見出しでのMySQLのエクスポートCSVファイル](http://homepage.mac.com/kelleherk/iblog/C711669388/E20060511141025/index.html) –

答えて

16

MySQL 5以降を実行している間は、手動で名前を入力する必要があります。ここでは、UNIXのコマンドラインで実行するためのbashスクリプトとして記述され、次のとおりです。

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 

ない最も優雅な解決策が、私はそれがSQLを知っている誰かによって単一の行に圧縮することができると確信している、および/または私より少し良くbashの...それは何

は次のとおりです。

  1. が列ヘッダー
  2. は、そのため空CSVへの余分な改行を追加/ wの空のCSVを作成するために、MySQLの情報スキーマを使用していますあなたのデータが表示され始めます新しいライン
  3. はかなり標準を使用しています「OUTFILE INTO SELECT * ...」データ
  4. の完全なCSVを作成するためのクエリは、(一時的な)データを削除
  5. 列ヘッダ/ wのファイルにデータファイルを追加しますファイル

幸運にも、掃除したら結果を投稿してください!

8

私はこれがあなたが望むことをすると思います。私はmysql 5.1.60を使用しています、これは最初の行にフィールド名を出力します。これはフィールドセパレータとして "\ t"を使用しますが、代わりにコンマを要求する方法はわかりません。

echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv 
+0

これはカンマ文字を含むフィールドを引用しないので、もちろんデータの性質によっては無効なCSVファイルが生成される可能性があります。 –

+0

@BobbyJackセパレータがタブの場合、カンマを気にする必要はもうありません... – rloth

関連する問題