2009-06-23 4 views
8

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

row1column1
row1column2
row2column1
row2column2
row3column1
row3column2

Я попытался с помощью CHAR (13) :

SELECT CONCAT(column1, char(13), column2) FROM my_table INTO outfile 'my_file' 

и выходной файл казался совершенно прекрасным (eac h были в другой строке), но когда я использовал его в качестве входных данных для программы, которая должна принять описанный формат, она не распознала ее. Однако, когда я вручную удалил все возвраты каретки в файл и добавил их снова, нажав клавишу «Ввод», моя программа распознала файл без проблем. Когда я попытался с гольца (13), CHAR (10), мой выходной файл выглядел следующим образом:

row1column1
\
row1column2
row2column1
\
row2column1

Я уверен, Мне не хватает чего-то очевидного здесь :)

+0

какой формат выходного файла , csv файл? –

ответ

7

Я вижу его на сайте mysql, надеюсь, его помощь u.

Вы должны использовать следующий синтаксис для создать файл CSV в формате ожидаемый Microsoft Excel:

... INTO OUTFILE '/temp.csv' ПОЛЕЙ спасся ' ""' ОТМЕНЯЛСЯ BY «» ENCLOSED BY «"»строки оканчивается „\ г \ п“;

Однако поля с кареткой возвращает может разорвать CSV в MySQL будет автоматически закрывает поле, когда \ r \ n разрыв строки. Для работы вокруг этого замените все \ r \ n перерывы с \ n. Поле не закрывается на \ n перерывами, и оно будет считано в ячейке в Excel. Вы можете сделать это в одном операторе SQL, для Например:

ВЫБОР ЗАМЕНИТЬ (field_with_line_breaks, '\ г \ п', '\ п') FROM таблицы INTO '/temp.csv' Outfile ESCAPED ПОЛЯ BY ' ""' ОТМЕНЯЛОСЬ BY '' ЗАКРЫТАЯ BY '"' ЛИНИИ TERMINATED BY '\ г \ п';

Я также обнаружил, что нулевые значения могут разбить CSV Они могут быть обработаны в с. аналогичным образом:

SELECT IFNULL (possible_null_field, "") FROM table INTO OUTFILE '/ temp.Csv ' ПОЛЯ ESCAPED BY ' ""' TERMINATED BY ',», окруженное '"' ЛИНИИ TERMINATED BY '\ г \ п';

Примечания: это заменяет NULL значения с пустой строкой, которая является технически не то же самое, но это даст вам пустую ячейку в Excel вместо нарушающего структуру CSV и сдвигая следующие клетки к слева

4

Попробуйте только символ (10). - это «\ n "- путь UNIX.
Just char (13) «\ r» - это (старый) способ mac, а «\ r \ n» - это путь к окнам, но я подозреваю, что MySQL просто использует \ n для каждой строки, поэтому вам нужно будет это сопоставить.

+0

Это просто помещает «\» между двумя столбцами – Daniel

+0

Обратите внимание, что для запроса запроса на работу с CLI (mysql -Ne) мне пришлось использовать -r писать поля без преобразования. Используется с --batch. HTH, Dan. –

1

У вас, вероятно, есть проблемы с различиями в интерпретации новой строки между операционными системами.

Если база данных MySQL на Unix/Linux, и файл будет читаться на Unix или базы данных на Windows, и будет читаться на Windows, то попробуйте следующее:

select * into outfile 'my_file' 
fields terminated by '\n' lines terminated by '\n' 
from my_table; 

Если база данных MySQL находится на Unix/Linux, и файл будет читаться на Windows, то попробуйте следующее:

select * into outfile 'my_file' 
fields terminated by '\r\n' lines terminated by '\r\n' 
from my_table; 

Вы также можете конвертировать файлы между «CRLF» (Windows) и «LF» (Unix) перевода строки с помощью небольшой, командной строки утилиту dos2unix и unix2dos, которая включена в большинство дистрибутивов Linux.

4

ответ работы Хаима Evgi, но:

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '""' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

мне пришлось изменить, чтобы:

SELECT REPLACE(field_with_line_breaks, '\r\n', '\n') FROM table INTO OUTFILE '/temp.csv' FIELDS ESCAPED BY '"' TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'; 

Был двойной кавычки в ПОЛЕЙ ESCAPED BY, который дал эту ошибку в MySQL: " Ошибка 1083: аргумент разделителя полей не является тем, что ожидается, проверьте руководство ".

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

+0

Я думаю, вы должны были только что отредактировать ответ Хаима Евги. Я это сделал; он еще не утвержден. –

Смежные вопросы