mysql导入csv问题

时间:2008-11-05 13:23:39

标签: php mysql html csv

好的,我刚刚阅读并尝试在最后一小时将csv文件从access导入到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?

我试图尽可能保持这个问题的具体内容,而不是像其他人所建议的那样要求人们为我做这件事,但老实说,我无法看出问题所在。

编辑:当试图通过php显示数据时,当页面完全是黑色时,某些表格单元格有边框而其他表格没有,当尝试不同的分隔符时,这些字段与列不匹配。开始字段从未正确显示。

我使用以下命令从CSV文件加载文件:

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

除了起始字段之外,它在DB中看起来很好,这不是目前的主要问题。

edit2:我已经将结果序列化了,这就是输出到屏幕的内容:

i:0;

我完全不知道这意味着什么。

edit3:我曾尝试通过分隔符更新终止,并且在更改\“to之后;问题仍然​​是数据没有被放入正确的列等...,我不明白我错过了什么.. < / p>

3 个答案:

答案 0 :(得分:5)

您的字段以“;”结尾不是“\”“。​​改变

 FIELDS TERMINATED BY '\"'

 FIELDS TERMINATED BY ';'

你也可以添加它:

 OPTIONALLY ENCLOSED BY '"'

我认为你正在尝试使用TERMINATED BY子句。

答案 1 :(得分:0)

错误可能是由数据库中的数据损坏,查询从数据库中检索数据或输出方式引起的。你需要将其缩小到其中一个原因。

  1. 直接查看您选择的表格。我建议phpMyAdmin为此。
  2. 直接将查询结果打印到屏幕上。一种非常粗略但可行的方法可能是serialise它: echo serialize($result);
  3. 如果您可以排除1和2作为错误原因,则问题必须在于处理查询。
  4. 一旦你确定 的原因是什么,就可以更容易确定原因是什么; - )

    正如Ted Elliot所说:你的字段被“;”终止不是“\”“。​​改变FIELDS TERMINATED BY '\"'FIELDS TERMINATED BY ';'

    此外,将数据导入mysql中的datetime字段的正确格式似乎是ISO格式:YYYY-MM-DD HH:mm:ss(例如2007-07-31 00:00:00)。

答案 2 :(得分:0)

通常情况下,您使用的“FIELDS TERMINATED BY”字符串实际上出现在其中一个字段中,通过将一个小程序写入.split()来检查文件中的每一行并计算字段。希望您可以控制输入文件的生成方式,并且可以使用极不可能的东西,例如“~~~~~”

另外,(不是直接相关,但你知道)你仍然必须做“\ N”在数据库中输入空值,输入文件中的空字符串可以在数字字段中变为零

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

相关问题