Я сталкиваюсь с некоторыми трудностями с использованием SELECT … OUTFILE MySQL в наборах результатов, которые включают как нулевые значения, так и столбцы, которые требуют двойного кавычки (т. Е. Столбцы, содержащие символы «). Это синтаксис outfile, который я использую:
INTO OUTFILE '$csv_file' FIELDS ESCAPED BY '""' TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
Моя проблема связана с частью запроса FIELDS ESCAPED BY – если эта часть опущена, то нулевые значения будут экспортироваться правильно (…, «\ N», … это то, что похоже на csv).
Однако столбцы, содержащие двойные кавычки, будут разделены на несколько строк / столбцов в excel. Это связано с тем, что для excel требуется, чтобы символы «» внутри столбцов были экранированы, написав их как «» «».
Включение предложения FIELDS ESCAPED BY устраняет проблему excel с столбцами, содержащими символы двойной кавычки, однако он разбивает столбцы NULL. Столбцы NULL экспортируются как (… "N, …), отсутствующие как обратная косая черта, так и следящая кавычка в столбце. В excel это приводит к краху нескольких столбцов из-за отсутствия закрывающейся цитаты.
Моя цель состоит в том, чтобы иметь возможность экспортировать столбцы, содержащие двойные кавычки и новые строки, а также экспортировать нулевые столбцы как \ N, однако я не могу понять, как это сделать. В MySQL docs указано, что FIELDS ESCAPED BY влияет на вывод столбцов NULL, но я не могу понять, как escape-последовательность из «" »'приводит к отбрасыванию обратной косой черты и завершающей кавычки в столбце NULL
В настоящее время моим решением является выполнение замены строки в каждой строке, когда я выводю ее пользователю, используя FIELDS ESCAPED BY и заменяя «N» на «» \ N ». «Я чувствую себя хорошо, и я боюсь, что это вызовет какие-то проблемы по линии
IFNULL () в столбцах выбора потенциально является опцией, но способ, которым мы используем это в нашем коде, на самом деле довольно сложно реализовать. Это также необходимо сделать для каждого столбца, который потенциально может иметь значения NULL, поэтому это решение, которое я бы хотел избежать, если смогу
Благодаря!
Попытайтесь использовать функцию coalesce
для преобразования столбца, который может быть null
для ""
http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce
Я смог успешно сохранить результаты запросов MySQL в CSV и импортировать их в Excel следующим образом:
Используйте форму …
IFNULL(ColumnA, "" ) AS "Column A",
… для каждого столбца или выражения в инструкции SELECT, чем может возвращать NULL (\ N). Это обеспечит, что значения NULL в вашем файле CSV будут отображаться как правильно пронумерованные строки, а не некорректно цитируемые \ N. Вместо пустой строки вы можете указать значение для представления NULL, например ..
IFNULL(ColumnA, "~NULL~" ) AS "Column A",
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n'