MySQL импорта CSV проблема - PullRequest
0 голосов
/ 05 ноября 2008

ОК, я только что прочитал и пытался в течение последнего часа импортировать файл CSV из доступа в MySQL, но я не могу заставить его сделать это правильно, независимо от того, что я пытаюсь.

Мой стол выглядит так:

+-----------------+-------------
| Field           | Type
+-----------------+-------------
| ARTICLE_NO      | varchar(20)
| ARTICLE_NAME    | varchar(100)
| SUBTITLE        | varchar(20)
| CURRENT_BID     | varchar(20)
| START_PRICE     | varchar(20)
| BID_COUNT       | varchar(20)
| QUANT_TOTAL     | varchar(20)
| QUANT_SOLD      | varchar(20)
| STARTS          | datetime
| ENDS            | datetime
| ORIGIN_END      | datetime
| SELLER_ID       | varchar(20)
| BEST_BIDDER_ID  | varchar(20)
| FINISHED        | varchar(20)
| WATCH           | varchar(20)
| BUYITNOW_PRICE  | varchar(20)
| PIC_URL         | varchar(20)
| PRIVATE_AUCTION | varchar(20)
| AUCTION_TYPE    | varchar(20)
| INSERT_DATE     | datetime
| UPDATE_DATE     | datetime
| CAT_1_ID        | varchar(20)
| CAT_2_ID        | varchar(20)
| ARTICLE_DESC    | varchar(20)
| DESC_TEXTONLY   | varchar(20)
| COUNTRYCODE     | varchar(20)
| LOCATION        | varchar(20)
| CONDITIONS      | varchar(20)
| REVISED         | varchar(20)
| PAYPAL_ACCEPT   | tinyint(4)
| PRE_TERMINATED  | varchar(20)
| SHIPPING_TO     | varchar(20)
| FEE_INSERTION   | varchar(20)
| FEE_FINAL       | varchar(20)
| FEE_LISTING     | varchar(20)
| PIC_XXL         | tinyint(4)
| PIC_DIASHOW     | tinyint(4)
| PIC_COUNT       | varchar(20)
| ITEM_SITE_ID    | varchar(20)

Что должно быть хорошо, и мои данные в настоящее время разделены точкой с запятой, пример строки из моего файла CSV, таким образом:

"110268889894";"ORIGINAL 2008 ED HARDY GÜRTEL* MYSTERY LOVE  * M *BLACK";"";0,00 €;0,00 €;0;1;0;8.7.2008 17:18:37;5.11.2008 16:23:37;6.10.2008 17:23:37;29;0;0;0;125,00 €;"";0;2;6.10.2008 16:21:51;6.10.2008 14:19:08;80578;0;;0;77;"";0;0;1;0;-1;0,00 €;0,00 €;0,00 €;0;0;0;77
"110293328957";"Orig. Ed Hardy Shirt - Tank Top - Gr. XS- OVP/NEU";"";25,05 €;0,00 €;7;1;0;27.9.2008 06:26:27;6.10.2008 18:26:21;6.10.2008 18:26:21;49;0;0;0;0,00 €;"";0;1;6.10.2008 16:21:56;6.10.2008 16:33:20;31058;0;;0;77;"";1;0;0;0;-1;0,00 €;0,00 €;0,00 €;0;0;0;77   

Я использую простую страницу php для вывода данных таблицы, и это совершенно неправильно. Проблема не в том, что страница php представляет собой простую таблицу, в которой просто отображается текст. Мне интересно, если я выбрал неправильные типы полей или столбцы не совпадают, но я не вижу причин, чтобы это было так. Может ли что-то происходить, потому что данные пытаются отображаться в формате html?

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

edit: при попытке отобразить данные через php, в данный момент страница полностью черная, у некоторых ячеек таблицы есть границы, а у других - нет, в других случаях при попытке использовать разные разделители поля не совпадают со столбцами. Поле запуска никогда не отображалось правильно.

Я загружаю файл из файла CSV с помощью этой команды:

LOAD DATA LOCAL INFILE 'C:/Dokumente und Einstellungen/hom/Desktop/tblAuction.txt' INTO TABLE Auctions FIELDS TERMINATED BY '\"' LINES TERMINATED BY '\n';

Насколько я могу судить, в БД все выглядит отлично, за исключением поля стартов, которое на данный момент не является основной проблемой.

edit2: я сериализовал результат, и это то, что было выведено на экран:

i:0;

Я понятия не имею, что это значит.

edit3: я пытался обновить завершенный разделителем, и после изменения \ "до сих пор остается проблема с данными, которые не помещаются в правильные столбцы и т. Д., Я не понимаю, что пропустил ...

Ответы [ 3 ]

5 голосов
/ 05 ноября 2008

Ваши поля заканчиваются на ";" не "\" ". Изменить

 FIELDS TERMINATED BY '\"'

до

 FIELDS TERMINATED BY ';'

Вы также можете добавить это:

 OPTIONALLY ENCLOSED BY '"'

Я думаю, это то, что вы пытались сделать с предложением TERMINATED BY.

0 голосов
/ 05 ноября 2008

обычно случается так, что то, что вы используете как строку «FIELDS TERMINATED BY», действительно происходит внутри одного из полей, проверьте это, написав небольшую программу для .split () каждой строки в файле и подсчитав поля. Надеюсь, вы управляете тем, как генерируется входной файл, и можете использовать что-то крайне маловероятное, например, «~~~~~»

Кроме того (не напрямую, но вы должны знать), вам все равно нужно сделать «\ N» для ввода нулей в БД, и пустые строки во входном файле могут превратиться в нули в числовых полях

http://bugs.mysql.com/bug.php?id=23212

0 голосов
/ 05 ноября 2008

Ошибка может быть вызвана повреждением данных в вашей БД, запросом на получение их из БД или способом ее вывода. Вам нужно сузить его до одной из этих причин.

  1. Посмотрите на таблицу, из которой вы выбираете. Я предлагаю phpMyAdmin для этого.
  2. Напечатайте результат вашего запроса напрямую на экран. Очень грубый, но выполнимый способ может быть сериализация it: например, echo serialize($result);
  3. Если вы можете исключить 1 и 2 как причины вашей ошибки, проблема должна заключаться в обработке запроса.

После того, как вы определили , где причина, становится намного проще определить в чем причина; -)

Как отметил Тед Эллиот: Ваши поля заканчиваются на ";" не "\" ". Изменить FIELDS TERMINATED BY '\"' до FIELDS TERMINATED BY ';'

Также правильным форматом для импорта данных в поля даты и времени в mysql является формат ISO: ГГГГ-ММ-ДД ЧЧ: мм: сс (например, 2007-07-31 00:00:00).

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