use o
OPTIONALLY ENCLOSED BY
cláusula. SELECT *
FROM table
INTO OUTFILE 'table.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
O
OPTIONALLY
modificador faz isso apenas para colunas de string. Você também precisa deixar de fora a subconsulta que retorna a linha de cabeçalho. O problema é que todas as linhas de uma união precisam ter os mesmos tipos nas colunas, então está convertendo todas as não strings em strings para corresponder à linha de cabeçalho.