Как мне обрабатывать значения NULL в операторе mysql SELECT… OUTFILE в сочетании с FIELDS ESCAPED BY? Значения NULL в настоящее время усекаются

Я столкнулся с некоторыми трудностями при использовании MySQL SELECT ... OUTFILE для наборов результатов, которые включают как нулевые значения, так и столбцы, требующие экранирования двойных кавычек (т. Е. Столбцы, содержащие символы '"'). Я использую такой синтаксис 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 указано, что FIELDS ESCAPED BY влияет на то, как выводятся столбцы NULL, но я не могу понять, как escape-последовательность '""' приводит к отбрасыванию обратной косой черты и завершающей кавычки в столбце NULL

В настоящее время мое решение состоит в том, чтобы выполнить замену строки в каждой строке при выводе ее пользователю, используя FIELDS ESCAPED BY и заменяя '"N' на '" \ N ",'. Кажется, это работает, но кажется неправильным , и я боюсь, что это вызовет какие-то проблемы в строке

IFNULL () в столбцах выбора потенциально является вариантом, но то, как мы используем это в нашем коде, на самом деле довольно сложно реализовать. также необходимо сделать для каждого столбца, который потенциально может иметь значения NULL, поэтому это решение, которое я Хочу избежать, если смогу

Спасибо!

12
задан OMG Ponies 8 May 2011 в 20:30
поделиться