MysqlDump в формате CSV.(Закрытые строковые поля, первая строка описания, нет файлов sql) - PullRequest
0 голосов
/ 22 июля 2011

Я хотел бы знать параметры 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
  • Я получаю пустые файлы .sql из .txt
  • поля, заключенные в ", являются не только полями типа varchar, но и числовыми полями

На сервере установлена ​​операционная система Debian6.

Спасибо !!

1 Ответ

1 голос
/ 22 июля 2011
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 .Позволяет экспортировать сразу несколько таблиц в любом формате.В формате CSV записывается заголовок столбца, а строковые поля заключаются в указанный символ.

...