В phpMyAdmin есть два варианта импорта CSV файла.
Один из них - CSV. Другой - CSV, используя LOAD DATA.
Какая разница между этими двумя? Есть ли преимущество в использовании одного над другим?
В phpMyAdmin есть два варианта импорта CSV файла.
Один из них - CSV. Другой - CSV, используя LOAD DATA.
Какая разница между этими двумя? Есть ли преимущество в использовании одного над другим?
LOAD DATA INFILE - это MySQL-запрос, который работает полностью независимо от PHPMyAdmin.
Импорт CSV, вероятно, предполагает загрузку файла на сервер PHPMyAdmin, где он анализирует файл и строит серию операторов INSERT, которые будут выполняться против сервера.
Лично я бы не стал доверять чему-либо, что PHPMyAdmin делает;-) - однако фактическая производительность, вероятно, будет зависеть от вашей структуры таблицы и данных.
Однако я хочу заметить, что MySQL вставляет некоторые очень эффективные ярлыки при вставке данных из команды LOAD DATA INFILE.
Как указано выше, параметр LOAD DATA
на самом деле сообщает phpMyAdmin использовать команду MySQL, чтобы MySQL анализировал и загружал файл, а не phpMyAdmin, обрабатывая его сначала.
Как указано выше, предоставление MySQL доступа к загрузке файла может быть опасным, если вы не чувствуете на 100% безопасности относительно источника и точности файла. Это похоже на использование php-формы без защиты вставки sql для вставки данных.
Однако в некоторых случаях phpMyAdmin не форматирует данные правильно или не имеет проблем с его синтаксическим анализом, когда используется обычная CSV
". Это приведет к ошибкам без объяснения, таким как" неверный формат в строке N "или" неверный подсчет полей в строке N "Возможно, это не точные сообщения об ошибках, так как я не зарегистрирован в phpMyAdmin на данный момент. В этих случаях параметр LOAD DATA
может использоваться для передачи ошибки. Я думаю, что дополнительная опция Use local keyword
имеет отношение к тому, чтобы убедиться, что правильные команды для этой конкретной версии MySQL на локальном сервере используются. Однако не уверены в последней части.
Что-то, о чем следует помнить, это также размер файла (количество импортируемых строк). Мне пришлось разбивать файл с линейкой 1600 на более мелкие файлы даже при использовании параметра LOAD DATA
, чтобы заставить его идти через. Он не выдавал ошибок, но "затронутые строки" были неправильными, когда файл был слишком большим.
Первый параметр будет содержать phpMyAdmin, чтобы проанализировать сам файл CSV, а затем сгенерировать и выполнить SQL для вставки данных. Второй вариант позволит MySQL заботиться о загрузке, обработке и вставке данных.
Оба варианта (должны) ведут себя одинаково, но опция LOAD DATA INFILE, как правило, намного быстрее, и вам не нужно беспокоиться о временных ограничениях памяти и времени выполнения PHP. Единственная проблема заключается в том, что она не поддерживается всеми конфигурациями, потому что есть последствия для обеспечения доступа MySQL к загруженным файлам и, как таковая, часто отключается (например, общий хостинг).
CSV и CSV с использованием LOAD DATA. Первый метод реализуется внутри phpMyAdmin и является рекомендуемым для его простоты. Со вторым методом phpMyAdmin получает загружаемый файл и передает его в MySQL. Теоретически этот метод должен быть быстрее. Однако у него больше требований из-за самой MySQL
Чтобы добавить к другим ответам: "CSV" настаивает на том, что у вас точно такое же количество столбцов в текстовом файле и в таблице. "CSV с использованием LOAD DATA" не работает.