13

重複の可能性:
MySql テーブルをフィールド名 (別名ヘッダーまたは列名) を含むテキスト ファイルにエクスポート/ダンプする方法

次の SQL スニペットを使用して、テーブルを CSV テキスト ファイルにダンプします。

SELECT * FROM brand INTO OUTFILE "e:/brand.csv" フィールドは ',' で囲まれ、'"' で終了する行は "\n" で終了します。

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

4

2 に答える 2

23

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 行に圧縮できると確信しています...

それがすることは次のとおりです。

  1. MySQL の情報スキーマを使用して、列ヘッダー付きの空の CSV を作成します
  2. その空のCSVに余分な改行を追加して、データが新しい行に表示されるようにします
  3. 非常に標準的な「SELECT * INTO OUTFILE...」クエリを使用して、データでいっぱいのCSVを作成します
  4. データファイルを列ヘッダー付きのファイルに追加します
  5. (一時) データファイルを削除します

頑張ってください。きれいになったら、結果を投稿してください。

于 2012-01-21T02:13:30.923 に答える
7

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

echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv
于 2012-03-13T17:23:24.597 に答える