0

在 PHP 中,我使用该fputcsv函数生成一个逗号分隔的文件,以便在 MySQL 表中导入(使用 LOAD DATA INFILE):

fputcsv($fcsv, array( 
    $id,
    $name,
    $optional
));

$optional可以为空,所以在 MySQL 中这应该是NULL

在 MySQL 文档中,我读到要导入一个NULL值,它应该\N在 csv 文件中定义。

但是该fputcsv函数在它周围加上引号,所以 MySQL 认为它是string "\N"

有没有解决方案,或者我应该忘记使用fputcsv

4

1 回答 1

0

有点 hack,但你可以在输出中用 str_replace 用 \N 替换“\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);

可能也不是最节省内存的,所以对于大型数据集要小心,但应该可以......

于 2013-08-23T14:52:02.587 回答