0

好的,我最近一小时一直在阅读并尝试将 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,是否会发生某些事情?

我试图让这个问题尽可能具体,并没有像其他人建议的那样要求人们为我做这件事,但老实说,我看不出问题出在哪里。

编辑:当尝试通过 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;

我完全不知道那是什么意思。

编辑3:我曾尝试更新由分隔符终止的,并且在将 \" 更改为 ; 问题仍然存在,数据没有被放入正确的列等......,我不明白我错过了什么。

4

3 回答 3

5

您的字段以“;”结尾 不变

 FIELDS TERMINATED BY '\"'

 FIELDS TERMINATED BY ';'

你也可以添加这个:

 OPTIONALLY ENCLOSED BY '"'

我认为这就是你试图用 TERMINATED BY 子句做的事情。

于 2008-11-05T13:54:26.950 回答
0

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

  1. 直接查看您选择的表格。我为此建议使用phpMyAdmin
  2. 将查询结果直接打印到屏幕上。一种非常粗略但可行的方法是将其序列化:例如echo serialize($result);
  3. 如果您可以排除 1 和 2 作为错误的原因,则问题必须出在查询的处理上。

一旦确定了原因所在,就更容易确定原因是什么;-)

正如 Ted Elliot 所说:您的字段以“;”结尾 不是“\””。FIELDS TERMINATED BY '\"' 改为FIELDS TERMINATED BY ';'

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

于 2008-11-05T13:38:04.097 回答
-1

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

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

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

于 2008-11-05T14:49:02.953 回答