2011-07-22 5 views
0

ディレクトリに入るためには、mysqldumpのパラメータを知りたいと思います.CSV形式のすべてのテーブル(、+別々の記述+最初の行)です。私は 'sqlのような他のファイルは必要ありません。私は、出力でスキーマMysqlDumpをCSV形式に変換します。

CREATE TABLE `user` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(45) NOT NULL, 
    `lastname` varchar(45) NOT NULL, 
    `email` varchar(320) NOT NULL, 
) ENGINE=InnoDB 

にのみ、次の表を持っている場合、例えば

、私は私はまた、この

id;name;lastname;email 
1;"Mark";"Lenders";"[email protected]" 
... 

可能な場合のようなだけuser.csvファイルになるだろうvarcharフィールドのみを囲みたい

私はこのmysqldumpを呼び出し

mysqldump -u root -p -t -T /tmp dbschema --fields-enclosed-by=\" --fields-terminated-by=; 

を使用しかし、私はまだこれらのミスを持って

  • 私は(カラム名はヘッダー)のテーブルのフィールドを持つ最初の記述行を得ることはありません
  • .csvの代わりに.txtファイルを取得します。
  • .txtから.sqlの空のファイルappartを取得します。
  • "で囲まれたフィールドは、varcharフィールドだけでなく、数値フィールドでもあります。

サーバーにはDebian6オペレーティングシステムがあります。

ありがとうございます!

+0

SELECT ... INTO OUTFILEコマンドはどうですか?これは、CSVファイル内にデータを格納することができます。 ...しかし、このコマンドはヘッダ情報、データだけを書きません。 – Devart

+0

SELECT INTO OUTFILEは、すべてのテーブルをダンプしたいのでベストな解決策ではありません。だから、避けたい選択肢をたくさん作っていなければなりません。 –

+0

私はあなたに役立つかもしれないspで答えを追加しました。 – Devart

答えて

1
DELIMITER $$ 

CREATE PROCEDURE write_tables_to_csv() 
BEGIN 

    DECLARE ts, tn VARCHAR(64); 
    DECLARE cur CURSOR FOR SELECT table_schema 
           , table_name 
         FROM 
          information_schema.tables 
         WHERE 
          table_schema = 'test' 
          AND table_name LIKE 'table1%'; 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; 

    OPEN cur; 
    REPEAT 
    FETCH cur INTO ts, tn; 
    IF NOT done THEN 
     SET @sql = CONCAT('SELECT * FROM ', ts, '.', tn, ' INTO OUTFILE ''', tn, '.csv'' FIELDS OPTIONALLY ENCLOSED BY ''"'''); 
     PREPARE stmt1 FROM @sql; 
     EXECUTE stmt1; 
     DEALLOCATE PREPARE stmt1; 
    END IF; 
    UNTIL done 
    END REPEAT; 

    CLOSE cur; 
END 
$$ 

DELIMITER ; 

このプロシージャは、テーブル名を読み取り、SELECT文を生成して実行します。 スキーマと表の条件を変更します。

EDIT

また、あなたはdbForge Studio for MySQLでのデータエクスポートツールを使用しclould。一度に任意の形式のテーブルをエクスポートすることができます。 CSV形式は列ヘッダーを書き込み、文字列フィールドは指定された記号で囲みます。

+0

ありがとう!それは良い答えです。私はすでにこの可能性を知っていましたが、mysqldumpを使ってより単純な方法があるかどうかを知りたいと思います。しかし、このプロシージャは、前にカラム名を持つ最初の記述行のような私の間違いを避けていますか? –

+0

文字列の値を囲むには、 'FIELDS OPTIONALLY ENCLOSED BY'オプションを使用します(手順は編集されています)。列ヘッダーについて - SELECTコマンドはそれを書きません。 – Devart

+0

ありがとうございましたDevart!だから、最初の行で見出しを取得する解決策はありませんか?それは違いない! :-) (私は第三者のソフトウェアを必要としたくない) –

関連する問題