Хороший вопрос, и он актуален сегодня, как это было в 2011 году. Для этого я использую хранимую процедуру, которая принимает имя таблицы в качестве аргумента. Впоследствии он преобразует все нулевые значения в пустые строки (''), используя предварительно подготовленный оператор и без курсоров, поскольку курсоры не являются SQL. Я протестировал его с таблицей из 200 столбцов и полученным в результате подготовленным оператором длиной около 15 000 символов:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ExportFixNull`(
in tblname tinytext)
BEGIN
set @string=concat(
"Update ",@tblname," set ",
(
select group_concat(column_name,"=ifnull(",column_name,",'')")
from information_schema.columns
where table_name=@tblname
)
,";"
);
prepare s1 from @string;
execute s1;
drop prepare s1;
В основном SQL-файле есть утверждение
SET @@group_concat_max_len = 60000;
, что может иметь решающее значение.
Подробнее (на голландском): http://wiki.devliegendebrigade.nl/SELECT_INTO_OUTFILE_%28MySQL%29
С уважением,
Йерун Стромпф