MysqlDump为CSV格式。 (封闭字符串字段,第一个描述行,没有sql文件)

时间:2011-07-22 10:58:53

标签: mysql csv export mysqldump dump

我想知道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

在输出中,我只会得到像这样的user.csv文件

id;name;lastname;email
1;"Mark";"Lenders";"mark@gmail.com"
...

如果可能,我还想只包含varchar字段。

我使用这个mysqldump调用

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

但我仍然有这些错误:

  • 我没有获得包含表格字段的第一个描述行(列名称标题)
  • 我得到.txt文件而不是.csv
  • 我从.txt
  • 获取.sql空文件appart
  • "所包含的字段;不仅是varchar,还有数字领域

Server有一个Debian6操作系统。

谢谢!

1 个答案:

答案 0 :(得分: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语句并执行它们。 更改架构和表的条件。

修改

此外,您可以使用dbForge Studio for MySQL中的数据导出工具。它也可以同时以任何格式导出一些表格。 CSV格式写入列标题,字符串字段用指定的符号括起来。