2011-07-22 43 views
0

我想知道mysqldump參數以便獲取目錄,每個表格都以CSV格式(,分隔+描述第一行)。我不想要任何其他文件,如.sql。將MysqlDump轉換爲CSV格式。 (包含字符串字段,第一行描述,沒有sql文件)

例如,如果我只有下表中的模式

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=; 

但我仍然有這些錯誤:

  • 我沒有得到與表的字段的第一描述行(列名頭)
  • 我得到.txt文件而不是.csv
  • 我從.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語句並執行它們。 更改您的模式和表的條件。

編輯

此外,您在clould使用dbForge Studio for MySQL數據導出工具。它允許一次以任何格式導出一些表格。 CSV格式寫入列標題,字符串字段由指定的符號包圍。

+0

謝謝!這是一個很好的答案。我已經知道這種可能性,但是我想知道是否有更簡單的方式使用mysqldump。然而,這個過程是否避免了我之前問過的錯誤,比如第一行中的列名稱? –

+0

要包含字符串值,可以使用'FIELDS OPTIONALALLY ENCLOSED BY'選項(編輯過程)。關於列標題 - SELECT命令不寫入它。 – Devart

+0

再次感謝Devart!那麼,有沒有解決方案來獲得第一行的標題?一定是! :-)。 (我寧願不需要第三方軟件) –

相關問題