Импорт MySQL в phpmyadmin (CSV) подавляет кавычки - PullRequest
2 голосов
/ 26 июня 2009

Я пытаюсь импортировать .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?

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

Ответы [ 5 ]

1 голос
/ 09 июня 2011

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

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

2.) Откройте файл в OpenOffice Calc (скачать бесплатно с Oracle / Sun). 2a.) Нажмите Ctrl-F, чтобы открыть диалоговое окно Find. Нажмите «Дополнительные параметры» и убедитесь, что «Только текущий выбор» НЕ отмечен. 2б.) Поиск двойных кавычек. Если в вашем файле их нет, вы можете пропустить шаги 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) на \ "". 5с, и этот шаг гарантирует, что любые кавычки, встречающиеся в конце поля непосредственно перед кавычкой, разделяющей текст, должным образом «экранируются». 5f.) Наконец, сохраните файл, сохраняя его в формате UTF-8 (или в любом другом формате, который вам нужен для импорта). 6.a) В phpMyAdmin перейдите на вкладку «импорт», нажмите кнопку «Выбрать файл» и выберите файл, который вы только что сохранили. 6b.) В разделе «Формат импортируемого файла» следует выбрать CSV. Если имена столбцов находятся в первой строке, убедитесь, что флажок установлен. Наиболее важно, что «Поля заканчиваются» должны быть установлены в; (точка с запятой), «Поля, заключенные в» должны быть установлены на «(двойные кавычки), а« Поля, оставленные »должны быть установлены на \ (прямая косая черта). Вы устанавливаете это в своем файле, выполнив шаг 3, и если необходимо, выполнив шаги 5a - 5f.

7.) Нажмите «Иди» и молитесь, чтобы вы не просто потратили еще час.

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

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

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

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

1 голос
/ 27 июня 2009

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

0 голосов
/ 26 июня 2009

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

0 голосов
/ 26 июня 2009

Возможно, вы захотите написать собственный запрос LOAD DATA INFILE , похоже, он вам все равно понадобится, поскольку в какой-то момент этот процесс станет частью приложения.

0 голосов
/ 26 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...