Вопрос

Я пытаюсь импортировать файл .csv в таблицу MySQL через phpMyAdmin.

Файл .csv разделен каналами, отформатированными следующим образом:

data|d'ata|d'a"ta|dat"a|
data|"da"ta|data|da't'a|
dat'a|data|da"ta"|da'ta|

Данные содержат кавычки.Я не могу контролировать формат, в котором я получаю данные - они генерируются третьей стороной.

Проблема возникает, когда возникает | за которым следует двойная кавычка.Я всегда получаю сообщение об ошибке "недопустимое количество полей при вводе CSV в строке N".

Я загружаю файл со страницы импорта, используя Latin1, CSV, завершающийся символом |, разделенный символом ".

Я бы хотел просто измените символ "заключено в", но я продолжаю получать "Недопустимый параметр для импорта CSV:Поля, заключенные в ".Я пробовал использовать разных персонажей, но безуспешно.

Как я могу сказать MySQL принять этот формат в phpMyAdmin?

Настройка этих таблиц - первый шаг в написании программы, которая будет использовать загруженные файлы gzipped .csv для ведения каталога сайта электронной коммерции.

Это было полезно?

Решение

У меня была похожая проблема в течение последних нескольких часов, и я, наконец, запустил импорт, поэтому я поделюсь своим решением, даже если это может не помочь оригинальному постеру.

Сокращенная версия:
1.) если это файл Excel, сохраните в формате ODS (электронная таблица открытого документа).1a.) Если файл представляет собой какой-то текстовый формат с разделителями (как на оригинальном плакате), затем откройте Excel и, оказавшись внутри Excel, используйте File / Open, чтобы открыть файл.Там вы сможете выбрать соответствующий разделитель для просмотра файла.Убедитесь, что файл выглядит нормально, ЗАТЕМ сохраните в формате ODS (и закройте файл).

2.) Откройте файл в OpenOffice Calc (скачать бесплатно с Oracle / Sun).2a.) Нажмите Ctrl-F, чтобы открыть диалоговое окно Поиска.Нажмите "Дополнительные параметры" и убедитесь, что флажок "Только текущий выбор" НЕ установлен.2b.) Выполните поиск двойных кавычек.Если в вашем файле их нет, вы можете пропустить шаги 4 и 5.
3.) Сохранить как -> Текстовый CSV.Выберите параметры для формата UTF-8 (нажмите "u" 3 раза, чтобы быстро перейти к нему), выберите ";" (точка с запятой) в качестве разделителя и выберите двойные кавычки для текста.4.) Если на шаге 2b в вашем файле были обнаружены двойные кавычки, продолжайте, в противном случае просто импортируйте файл в формате CSV с помощью phpMyAdmin (см. Шаг 6).Это должно сработать.5a.) Откройте в Word или любом другом текстовом редакторе, где вы можете выполнить Поиск -> Заменить все.
5b.) Найдите все экземпляры трех двойных кавычек подряд, выполнив поиск по """ (если вы их найдете, возможно, вам даже захочется выполнить поиск по 4, 5, 6 и т.д.подряд, пока не останется ничего).5c.) Замените """ заполнителем, которого больше нигде нет в вашем csv.Я заменил их на "abcdefg".5d.) Найти -> Заменить все экземпляры "" (две двойные кавычки подряд) на \" (косая черта и двойные кавычки).5e.) Найти -> Заменить все экземпляры abcdefg (или выбранный вами заполнитель из шага 5c) на \"".5c и этот шаг гарантируют, что все кавычки, встречающиеся в конце поля непосредственно перед кавычкой, разделяющей текст, должным образом "экранированы".5f.) Наконец, сохраните файл в формате UTF-8 (или в любом другом формате, который вам нужен для импорта).6.a) В phpMyAdmin перейдите на вкладку "импорт", нажмите кнопку "выбрать файл" и выберите файл, который вы только что сохранили.6b.) в разделе "Формат импортируемого файла" следует выбрать CSV.Если имена столбцов находятся в первой строке, убедитесь, что этот флажок установлен.Самое главное, что для "Полей, заканчивающихся на", должно быть установлено значение ;(точка с запятой), "Поля, заключенные в" должны быть установлены в " (двойные кавычки), а "Поля, экранированные" должны быть установлены в \ (косая черта).Вы настраиваете это в своем файле, выполнив шаг 3, и, при необходимости, выполнив шаги 5a - 5f.

7.) Нажмите "Перейти" и молитесь, чтобы вы не потратили впустую еще один час.

Теперь, когда короткая версия получилась такой длинной, я пропущу длинную версию.

Достаточно сказать, что, похоже, есть 2 основные проблемы с импортом через phpmyadmin.1.) Существует какая-то проблема с памятью, которая предотвращает доступ к большим файлам Excel и ODS (насколько велик размер?пока не уверен) импортируется.2.) Ни OpenOffice, ни Excel, похоже, не сохраняют свои csv-файлы способом, совместимым с phpmyadmin.Они хотят избежать двойных кавычек с помощью двойных кавычек.phpMyAdmin хочет, чтобы двойные кавычки были экранированы чем-то другим, например косой чертой.

Надеемся, что первая проблема будет исправлена в обновлении phpmyadmin (и / или надстройки для импорта Excel 'PHPExcel').Вторую проблему можно было бы исправить, если бы существовал простой способ изменить escape-символ для файлов Excel или ODS, сохраненных в формате CSV, или если phpMyAdmin можно было бы сделать совместимым с их форматом (на самом деле это должно быть довольно просто.Просто попросите его выполнить те же действия поиска-замены, которые мы выполнили вручную выше, чтобы обойти проблему с двойными кавычками).

Я надеюсь, что это кому-нибудь поможет, так как я потратил 3-4 часа на поиск этого решения и еще час на написание его здесь.Я надеюсь, что это не слишком долго, но я надеялся помочь людям всех уровней квалификации, от нуля до того места, где я нахожусь (вероятно, около 0,1).

Другие советы

Я нашел хак, который работает: я использую $ в качестве символа «заключенного», и все в порядке.Поскольку это европейский сайт, я знаю, что они никогда не будут использовать его в содержимом таблицы.

вы можете изменить файлы csv, добавив \ перед каждым ', верно?

Пробовали ли вы закрыть поля с надписью «Поля, окруженные» и «Поля, закрытые»?Я не использовал phpMyAdmin, но Google предлагает другие добились успеха с помощью этого метода.

Вы можете подумать о том, чтобы просто написать свой собственный ЗАГРУЗИТЬ ИНФАЙЛ ДАННЫХ запрос, похоже, он вам все равно понадобится, поскольку в какой-то момент этот процесс станет частью приложения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top