在PHP中,我使用fputcsv
函数生成逗号分隔文件,以便在MySQL表中导入(使用LOAD DATA INFILE
):
fputcsv($fcsv, array(
$id,
$name,
$optional
));
$optional
可以为空,所以在MySQL中应该是NULL
在MySQL文档中,我读到要导入NULL
值,它应该在csv文件中定义为\N
。
但fputcsv
函数会在其周围加上引号,因此MySQL认为它是字符串 "\N"
。
是否有解决方案,或者我应该忘记使用fputcsv
?
答案 0 :(得分:0)
有点黑客,但你可以在输出中用\ N str_replace“\ N”:
//open temporary datastream for CSV output
$fp = fopen("php://temp", "w");
//assuming $data is an array of arrays each of which is a record with \N
//in place of nulls
foreach($data as $line) {
fputcsv($fp, $line);
}
//read data back in to a string
rewind($fp);
$csv_data = fgets($fp);
//replace "\N" with \N
$csv_data = str_replace('"\N"', '\N', $csv_data);
//save to file
file_put_contents($csv_file_path, $csv_data);
可能不是最节省内存的,所以要小心大数据集,但应该有效......