Как получить значения NULL в csv для MySQL с помощью fputcsv?

В PHP я использую fputcsv функция для создания файла, разделенного запятыми, для импорта в MySQL-таблицу (используя LOAD DATA INFILE):

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

$optional может быть пустым, поэтому в MySQL это должно быть NULL

В документации MySQL я прочитал, что импортировать NULL значение, оно должно быть определено как \N в csv-файле.

Но fputcsv функция заключает в кавычки, поэтому MySQL считает, что это строка "\N",

Есть ли решение для этого, или я должен забыть об использовании fputcsv?

1 ответ

Немного хак, но вы можете просто 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);

Может быть не самым эффективным для памяти, так что будьте осторожны с большими наборами данных, но должны работать...

Другие вопросы по тегам