2016-05-31 3 views
1

Я пытаюсь выгрузить содержимое моего mysql-запроса в csv и прочитать его с помощью некоторого javascript-считывателя csv с открытым исходным кодом. Вот проблемы, с которыми я сталкиваюсь,Mysql dump character escaping и CSV read

  1. В моем наборе данных имеется около 50 полей. Набор данных содержит несколько полей с текстом, имеющим разрывы строк. Поэтому, чтобы предотвратить разрыв моего CSV-ридера, я дал полям, необязательно заключенным в «\», чтобы разрывы строк были обернуты внутри двойных кавычек. В этом случае для других полей, даже если нет разрывов строк, он обертывает их внутри двойных кавычек
  2. Похоже, что escape-символ при выполнении mysql-дампа - это \ (обратная косая черта). Это приводит к появлению разрывов строк с \ в конце, который разбивает парсер csv. Чтобы удалить это \ в конце, если я даю поля, экранированные на «» (пустая строка), это вызывает мои двойные кавычки в тексте не экранировать, по-прежнему нарушая CSV читать.

было бы замечательно, если я могу пропустить перерыв линии побега, но по-прежнему сохраняют спасаясь двойные кавычки, чтобы заставить считыватель csv не прерываться.

Любые предложения, что я могу здесь сделать?

Спасибо, Sriram

+0

'OPTIONALLY ENCLOSED BY««» ESCAPED BY «»» 'должно быть то, что вы ищете для создания стандартного CSV, который ускоряет '' ', удваивая их. –

+0

@ Michael-sqlbot Спасибо за ваш комментарий. Я уже пробовал это. Он избегает разрывов строк внутри текстового поля с двойными кавычками, который разбивает количество поля в выводе csv. – sriram

+0

Извиняюсь, я неправильно читаю ваш вопрос. Я полагаю, вы могли бы «ВЫБРАТЬ CONCAT ('' ', REPLACE (column1,' '', '" "'), '' '), ... INTO OUTFILE. ..' –

ответ

1

Попробуйте сброс данных в CSV, используя uniVocity-parsers. После этого вы можете прочитать результат, используя ту же библиотеку:

Попробуйте для сброса данных из:

ResultSet resultSet = executeYourQuery(); 

// To dump the data of our ResultSet, we configure the output format: 
CsvWriterSettings writerSettings = new CsvWriterSettings(); 
writerSettings.getFormat().setLineSeparator("\n"); 
writerSettings.setHeaderWritingEnabled(true); // if you want want the column names to be printed out. 

// Then create a routines object: 
CsvRoutines routines = new CsvRoutines(writerSettings); 

// The write() method takes care of everything. Both resultSet and output are closed by the routine. 
routines.write(resultSet, new File("/path/to/your.csv"), "UTF-8"); 

И это прочитать файл:

// creates a CSV parser 
CsvParserSettings parserSettings = new CsvParserSettings(); 
parserSettings.getFormat().setLineSeparator("\n"); 
parserSettings.setHeaderExtractionEnabled(true); //extract headers from file 
CsvParser parser = new CsvParser(parserSettings); 

// call beginParsing to read records one by one, iterator-style. Note that there are many ways to read your file, check the documentation. 
parser.beginParsing(new File("/path/to/your.csv"), "UTF-8); 

String[] row; 
while ((row = parser.parseNext()) != null) { 
    System.out.println(Arrays.toString(row)); 
} 

Надеется, что это помогает.

Отказ от ответственности: Я автор этой библиотеки, это открытый источник и свободный (Apache V2.0 лицензия)

+0

Спасибо за ваш ответ. Как вы упомянули здесь, я определенно могу использовать Java Api, чтобы прочитать его и обработать, и записать его в CSV в соответствии с моими требованиями, но я хочу дать mysql встроенную функцию записи csv. Я думаю, что я, вероятно, что-то пропустил, так как побег в прерывании строки в текстовом поле и двойные кавычки убегают с тем же escape-символом. Я просто не хочу избегать разрывов строк, но вместо этого заключу их в двойные кавычки, но избегаю двойных кавычек, появляющихся в текстовом поле. – sriram

+0

Попробуйте это решение: http: // stackoverflow.com/questions/356578/how-to-output-mysql-query-results-in-csv-format Если это не сработает, не тратьте слишком много времени, пытаясь заставить его работать, mysql довольно плохо соблюдает стандарты любого типа, и вы потратите много времени, чтобы получить, возможно, более медленное решение. –