Доброго времени суток. Имеется файл csv с дампом базы, в нем около 100 000 строк, и 14 колонок с данными (из них мне нужно только только 7).
Вначале пробовал экспортировать вот так:
<?php
include '../../connect.php';
LOAD DATA INFILE 'in.csv' INTO TABLE table FIELDS TERMINATED BY ';' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 ROWS;
?>
Однако этот код вообще не работал (результата никакого). И еще в исходном файле есть лишние "столбцы", а при таком методе, насколько я понимаю, нужно создать поля в таблице по кол-ву столбцов в файле csv и идет заполнение всех полей строка за строкой. Поэтому была идея экспортировать все данные, а потом удалить ненужные поля в таблице MySQL.
Потом наткнулся на другой метод экспорта и теперь экспортирую данные в таблицу Msql этим кодом:
$csv_open = fopen("in.csv", "r");
$r = 0;
while (($row = fgetcsv($csv_open, 1000, ';', '"')) != FALSE)
{
$r++;
if($r == 1) {continue;} // Не дает записать в БД первую строку
$ins="INSERT INTO `table` (`id`, `street`, `house_number`, `app_number`, `description`, `device_id`, `old_meterage`) VALUES ('$row[0]', '$row[1]', '$row[2]', '$row[3]', '$row[8]', '$row[10]', '$row[13]')";
mysql_query($ins);
echo mysql_errno() . ": " . mysql_error();
}
fclose($csv_open);
Вопросы:
- Все работает отлично (нужные данные сохраняются в нужные ячейки), однако экспортируется около 7000 строк (причем при повторных попытках - от 7000 до 8000 строк), а должно порядка 100 000. В чем проблема?
- И еще вопрос - исходный файл в csv приходит в кодировке windows - 1251. Приходится вручную переводить кодировку в UTF-8 перед запуском скрипта экспорта. Можно как-то сделать так, чтобы скрипт это делал автоматически?