Если Вы хотите к модульному тесту закрытый метод, что-то может быть неправильным. Модульные тесты (вообще говоря), предназначены для тестирования интерфейса класса, означая его общественность (и защищены), методы. Можно, конечно, "взломать" решение этого (даже если только, обнародовав методы), но можно также хотеть рассмотреть:
Я думаю, ваше утверждение должно выглядеть так:
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)
Дайте нам знать, как у вас дела.
Что произойдет, если вы попробуете следующее?
Вместо вашего двойного оператора REPLACE
попробуйте:
REPLACE(IFNULL(ts.description, ''),'\r\n', '\n')
Кроме того, я думаю, что это должно быть LINES TERMINATED BY '\ r \ n '
вместо просто ' \ n '
Не просматривая выходной файл для подтверждения, я предполагаю, что вам нужно избавиться от значения FIELDS ESCAPED BY
.
MySQL FIELDS ESCAPED BY
, вероятно, ведет себя двумя способами, на которые вы не рассчитывали: (1) он предназначен только для одного символа, поэтому в вашем случае он, вероятно, равен только одной кавычке; (2) он используется, чтобы предшествовать каждому символу , который, по мнению MySQL, необходимо экранировать, включая значения FIELDS TERMINATED BY
и LINES TERMINATED BY
. Это имеет смысл для большей части компьютерного мира, но это не способ экранирования Excel.
Я думаю, что ваш двойной REPLACE
работает, и что вы успешно заменяете буквальные символы новой строки пробелами (два пробела в случае новой строки в стиле Windows). Но если в ваших данных есть запятые (литералы, а не разделители полей), им предшествуют кавычки, которые Excel обрабатывает совсем иначе, чем MySQL. Если это так, то ошибочные символы новой строки, которые вызывают сбой в работе Excel, на самом деле являются символами новой строки, которые MySQL задумывал как терминаторы строки.
Возможно, не поможет, но вы можете попробовать создать таблицу 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 ....
Вот что здесь работало: Имитирует 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';