Вопрос:

Как правильно экспортировать данные SQL в CSV

mysql sql

1543 просмотра

3 ответа

86 Репутация автора

Я пытаюсь экспортировать очень большие данные из mysql в .csv и импортировать .csv в другую идентичную таблицу, используя

into outfile

в phpmyadmin. Но когда я смотрю на файл Excel, он запутался. Кажется, что MySQL не может определить формат длинного текста, поэтому он переходит к другой строке, как эта:

введите описание изображения здесь

Поэтому, когда я пытаюсь импортировать это в идентичную таблицу, все это запутано. Вот мой код импорта в другую таблицу:

LOAD DATA INFILE 'final.csv'
INTO TABLE oldforum_nodewithusers
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'

Кстати, я вручную напечатал заголовки таблицы, так как я тоже не знаю, как поместить заголовки в код экспорта. Вот мой экспортный код:

SELECT 'some table columns'
into outfile 'final.csv'
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'

Так как это исправить? это в части экспорта? или импортная часть?

Я ЗНАЮ СЕЙЧАС ПРОБЛЕМА, ОНИ ТЕКСТ, КОТОРЫЙ УШЕЛ В СЛЕДУЮЩУЮ ЛИНИЮ НА ИЗОБРАЖЕНИИ, ПРЕВЫСИЛ ПРЕКРАЩЕНИЕ ТЕКСТА ДЛЯ КЛЕТОК В EXCELL

поэтому, когда я импортирую его в другую таблицу, таблица будет обрабатывать текст «следующей строки» как другую строку. У кого-нибудь есть решение для этого?

Автор: Cadz Источник Размещён: 04.04.2013 06:31

Ответы (3)


0 плюса

15911 Репутация автора

Я бы пошел с подходом командной строки (который работал хорошо для меня). В Linux (и других системах Unix):

$ mysql [connection parameters] yourDB -e"select..." | sed 's/\t/,/g' > yourOutput.csv

Объясняя

  • [connection parameters]Часть должна включать в себя: -h YourHost(где YourHostдолжен быть действительный адрес или имя сервера IP, или localhost), -u YourUserи -pYourPassword(обратите внимание , что вы не должны оставлять пробелы между -pи YourPassword)
  • mysql ... -e"select..."выводит результат запроса в стандартный out (ваша консоль), разделяя поля табуляцией ( \t).
  • | sed 's/\t/,/g'заменяет все вкладки ( \t) запятыми. Он принимает выходные данные предыдущей команды для обработки, а также выводит результат в стандартный вывод
  • > yourOutput.csv перенаправляет вывод предыдущей команды в файл вместо консоли

Вариант окон

Насколько я знаю, sedв Windows нет "нативной" альтернативы . Но вы можете установить Cygwin, который имеет функции «совместимые с командной строкой Windows», которые дублируют большинство функций Linux. Также вы можете захотеть взглянуть на GnuWin32, который имеет реализацию sed(среди прочего)

Я также нашел альтернативу в Есть ли Sed, как утилита для cmd.exe? чтобы создать VBScript, похожий на sed, вы можете проверить его.


Автор: Barranka Размещён: 04.04.2013 06:38

0 плюса

820893 Репутация автора

Попробуйте сделать этот трюк, чтобы получить заголовки:

select col1, col2 . . . -- export columns go here
into outfile . . .
from ((select 1 as isheader, 'Col1' as col1, 'Col2' as col2, . . .    -- headers go here
      ) union all
      (select 0 as isheader, col1, col2, . . . . -- data goes here
      )
     ) t
order by isheader desc

На практике удаление order byволи, вероятно, также будет работать:

select *
into outfile . . .
from ((select 'Col1' as col1, 'Col2' as col2, . . .    -- headers go here
      ) union all
      (select col1, col2, . . . . -- data goes here
      )
     ) t

MySQL не гарантирует, что заголовки будут идти первыми, но они делают это на практике.

Кроме того, чтобы сделать это, убедитесь, что ваши столбцы правильно преобразованы в нужный вам формат строки.

Автор: Gordon Linoff Размещён: 04.04.2013 07:03

0 плюса

86 Репутация автора

OMG я такой тупой. Ответ очень прост, вместо того, чтобы экспортировать его в файл .csv, я экспортировал его в .sql. LOL Очень просто и легко

Автор: Cadz Размещён: 04.04.2013 07:30
Вопросы из категории :
32x32