2016-01-27 1 views
1

Я экспортирую отчет базы данных с файлом оболочки. Если я запустил запрос в PHPMyAdmin, файл получится прекрасным, новые строки в конце каждой строки только в базе данных.Проблема с MySQL INTO OUTFILE с новыми строками в контенте

Однако, когда я запускаю запрос в своем сценарии оболочки, используя outfile для генерации файла, я получаю/n,/r и/r/n в некотором содержимом столбцов. Я не могу понять, что вызывает это и как его избежать.

Проблема только кажется вызванной в столбце цвета, который является третьим в примере экспорта.

Запрос:

mysql $MYSQLOPTS << EOFMYSQL 
SELECT Product_Name, Item_Size, Item_Colour, Item_Price, Current_Stock, Item_Price * Current_Stock AS Stock_Value 
FROM Items 
ORDER BY Product_Name 
INTO OUTFILE '$FILE' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
EOFMYSQL 

Пример результата:

"Scarf_in_Peach","ONE SIZE","12/04-B2B2 ",10.00,3,30.00 
"Scarf_in_Pink","ONE SIZE ","11/06-odds-C1C12100",10.00,0,0.00 
"Scarf_in_Red","ONE SIZE ","11/06-B7B2-C1C12100",10.00,0,0.00 
"Scarf_in_Sand_","ONE SIZE","11/06-B1I3-C1C12100 
",10.00,0,0.00 
"Scarf_in_Sand_/_Blue_Flowers","ONE SIZE","12/04-B2E2-C1C12100 ",10.00,4,40.00 
"Scarf_in_Teal","ONE SIZE","11/06-B5G1-C1C12100 
",10.00,0,0.00 
"Scarf_in_Teal_/_Red_Flowers","ONE SIZE","12/04 - B2B2 ",10.00,1,10.00 
"Sunrise_Skinnies","16","ODD-R1S009-1-BLUE",20.00,0,0.00 
"Sunrise_Skinnies","8","ODD-R1S009-1 

BLUE",20.00,0,0.00 
+0

Вы проверили свои данные, чтобы увидеть, действительно ли у вас есть пробелы (т. Е. \ N) в вашем поле? Я спрашиваю, потому что в конце я вижу пробелы некоторых записей, возможно, у вас также есть '\ n' – davejal

+0

. В базе данных некоторые из них имеют разрывы строк, однако, когда я экспортирую в CSV из PHPmyAdmin, я этого не делаю. Даже когда я не выбираю «Удалить символы возврата каретки/строки в столбцах», они прекрасны. –

+1

В вашем запросе вы можете заменить символы возврата каретки и строки на пустую строку. – Shadow

ответ

0

У вас есть 2 варианта:

  1. Заменить возврата каретки и перевода строки символов с пустой строкой в Ваш запрос. Pro: полностью зависит от вас, какие символы вы отфильтровываете и из каких полей. Con: вам нужно создать выражение для каждого затронутого поля вручную.

  2. Используйте FIELDS ESCAPED BY character вариант команды SELECT ... INTO OUTFILE ...:

ПОЛЯ ESCAPED BY управляет тем, как писать специальные символы. Если ПЛОЩАДКА ESCAPED BY не пустая, он используется, когда необходимо избежать двусмысленностей в качестве префикса, который предшествует следующие символы на выходе:

  • Поля спаслись характер

  • Полей [ОРТЮМАЬЬУ] ENCLOSED BY характер

  • Первый символ из полей TERMINATED BY и ЛИНИИ TERMINATED BY значений

  • ASCII NUL (нулевой байт; что на самом деле написано после экранирующего символа в ASCII «0», а не байт с нулевой величиной)

Полях TERMINATED BY, ENCLOSED BY, ESCAPED BY или LINES ОТМЕНЯЛОСЬ BY символы должны быть экранированы таким образом, чтобы вы можете прочитать файл обратно в надежно. ASCII NUL ускользает, чтобы было проще просматривать некоторые пейджеры .

Pro: это быстрый и стандартный подход, который можно легко применить ко всем функциям экспорта, используя этот подход. Con: менее гибкий. Например, если строки, завершаемые опцией, установлены на \n, то \r не будет экранирован, что может вызвать некоторые проблемы в некоторых системах.

0

Проблема в том, что в ваших данных у вас есть разрывы строк в самом поле, phpmyadmin обрабатывает это для вас автоматически. Вы должны выполнить запрос, пытаясь удалить лишние строки из полей.

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