Экспорт MySQL в outfile: символы выхода CSV

Если Вы хотите к модульному тесту закрытый метод, что-то может быть неправильным. Модульные тесты (вообще говоря), предназначены для тестирования интерфейса класса, означая его общественность (и защищены), методы. Можно, конечно, "взломать" решение этого (даже если только, обнародовав методы), но можно также хотеть рассмотреть:

  1. , Если метод требуется протестировать, действительно стоит протестировать, может стоить для перемещения его в его собственный класс.
  2. Добавляют больше тестов к открытым методам, которые называют закрытый метод, тестируя функциональность закрытого метода. (Как комментаторы указали, необходимо только сделать это, если функциональность этих частных методов является действительно частью в с открытым интерфейсом. Если они на самом деле выполняют функции, которые скрыты от пользователя (т.е. модульный тест), это, вероятно, плохо).
43
задан Buttle Butkus 24 May 2016 в 06:33
поделиться

5 ответов

Я думаю, ваше утверждение должно выглядеть так:

SELECT id, 
   client,
   project,
   task,
   description, 
   time,
   date  
  INTO OUTFILE '/path/to/file.csv'
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM ts

В основном без параметра ПОЛЯ, ЗАКЛЮЧЕННЫЕ '""' , ДОПОЛНИТЕЛЬНО ЗАКРЫТО '"' сделает трюк для полей описания и т. д., и ваши числа будут обрабатываться в Excel как числа (а не строки, состоящие из цифр)

Также попробуйте позвонить:

SET NAMES utf8;

перед выбором файла вывода, это может помочь получить встроенные кодировки символов ( все UTF8)

Дайте нам знать, как у вас дела.

77
ответ дан 26 November 2019 в 22:44
поделиться

Что произойдет, если вы попробуете следующее?

Вместо вашего двойного оператора REPLACE попробуйте:

REPLACE(IFNULL(ts.description, ''),'\r\n', '\n')

Кроме того, я думаю, что это должно быть LINES TERMINATED BY '\ r \ n ' вместо просто ' \ n '

2
ответ дан 26 November 2019 в 22:44
поделиться

Не просматривая выходной файл для подтверждения, я предполагаю, что вам нужно избавиться от значения FIELDS ESCAPED BY .

MySQL FIELDS ESCAPED BY , вероятно, ведет себя двумя способами, на которые вы не рассчитывали: (1) он предназначен только для одного символа, поэтому в вашем случае он, вероятно, равен только одной кавычке; (2) он используется, чтобы предшествовать каждому символу , который, по мнению MySQL, необходимо экранировать, включая значения FIELDS TERMINATED BY и LINES TERMINATED BY . Это имеет смысл для большей части компьютерного мира, но это не способ экранирования Excel.

Я думаю, что ваш двойной REPLACE работает, и что вы успешно заменяете буквальные символы новой строки пробелами (два пробела в случае новой строки в стиле Windows). Но если в ваших данных есть запятые (литералы, а не разделители полей), им предшествуют кавычки, которые Excel обрабатывает совсем иначе, чем MySQL. Если это так, то ошибочные символы новой строки, которые вызывают сбой в работе Excel, на самом деле являются символами новой строки, которые MySQL задумывал как терминаторы строки.

2
ответ дан 26 November 2019 в 22:44
поделиться

Возможно, не поможет, но вы можете попробовать создать таблицу CSV с таким содержимым:

DROP TABLE IF EXISTS foo_export;
CREATE TABLE foo_export LIKE foo;
ALTER TABLE foo_export ENGINE=CSV;
INSERT INTO foo_export SELECT id, 
   client,
   project,
   task,
   REPLACE(REPLACE(ifnull(ts.description,''),'\n',' '),'\r',' ') AS description, 
   time,
   date
  FROM ....
0
ответ дан 26 November 2019 в 22:44
поделиться

Вот что здесь работало: Имитирует Excel 2003 (Сохранить как формат CSV)

SELECT 
REPLACE( IFNULL(notes, ''), '\r\n' , '\n' )   AS notes
FROM sometables
INTO OUTFILE '/tmp/test.csv' 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';
  1. Excel сохраняет \ r \ n для разделителей строк.
  2. Excel сохраняет \ n для символов новой строки в данных столбца
  3. Сначала необходимо заменить \ r \ n внутри ваших данных, иначе Excel будет думать, что это начало следующей строки.
15
ответ дан 26 November 2019 в 22:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: