Как получить значения 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);
Может быть не самым эффективным для памяти, так что будьте осторожны с большими наборами данных, но должны работать...