Я сталкиваюсь с некоторыми трудностями при использовании MySQL SELECT ... OUTFILE для наборов результатов, которые включают в себя как нулевые значения, так и столбцы, для которых требуется экранирование двойных кавычек (т. Е. Столбцы, содержащие символы "").используя:
INTO OUTFILE '$csv_file'
FIELDS ESCAPED BY '""' TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n'
Моя проблема связана с частью запроса FIELDS ESCAPED BY - если эта часть пропущена, то нулевые значения будут экспортироваться правильно (..., "\ N", ... isкак это выглядит в csv).
Однако столбцы, содержащие двойные кавычки, будут разбиты на несколько строк / столбцов в Excel. Это связано с тем, что Excel требует, чтобы символы "" "внутри столбцов были экранированы путем записиих как "" ".
Включение предложения FIELDS ESCAPED BY устраняет проблему Excel со столбцами, содержащими символы двойной кавычки, однако разбивает столбцы NULL.Столбцы NULL экспортируются как (... "N, ...) без обратной косой черты и конечной кавычки в столбце. В Excel это приводит к тому, что несколько столбцов сворачиваются друг в друга из-за отсутствия закрывающей кавычки.
Моя цель - иметь возможность экспортировать столбцы, содержащие двойные кавычки и символы новой строки, а также экспортировать пустые столбцы как \ N, однако я не могу понять, как это сделать. Документы MySQL утверждают, чтоFIELDS ESCAPED BY влияет на способ вывода столбцов NULL, но я не могу понять, как escape-последовательность "" "приводит к удалению обратной косой черты и завершающей кавычки в столбце NULL
В настоящее время мое решениечтобы выполнить замену строки в каждой строке при выводе ее пользователю, используя FIELDS ESCAPED BY и заменяя «N» на «\ N», '.Кажется, это работает, но это не правильно, и я боюсь, что это вызовет какие-то проблемы в дальнейшем
IFNULL () в столбцах выбора - это вариант, но способ, которым мыиспользовать это в нашем коде, на самом деле довольно сложно реализовать.Это также необходимо сделать для каждого столбца, который потенциально может иметь значения NULL, поэтому я бы хотел избежать такого решения, если смогу
Спасибо!