LOAD DATA INFILE不会导入CSV数据源中的所有行

时间:2011-05-19 04:26:23

标签: mysql sql database csv load-data-infile

我正在尝试将CS​​V文件中的数据加载到MySQL数据库中,并注意到导入文件时似乎跳过了大量记录。

这些数据来自政府来源,并且在不寻常的地方使用单引号等格式非常奇怪。以下是未插入记录的示例:

"'050441'","STANFORD HOSPITAL","CA","H_HSP_RATING_7_8","How do patients rate the hospital overall?","Patients who gave a rating of'7' or '8' (medium)","22","300 or more","37",""

然而,此记录确实已插入:

"'050441'","STANFORD HOSPITAL","CA","H_HSP_RATING_0_6","How do patients rate the hospital overall?","Patients who gave a rating of '6' or lower (low)","8","300 or more","37",""

我用来加载数据的SQL在这里:

mysql> load data infile "c:\\HQI_HOSP_HCAHPS_MSR.csv" into table hospital_qualit
y_scores fields terminated by "," enclosed by '"' lines terminated by "\n" IGNOR
E 1 LINES;

我正在加载数据的表的格式如下:

delimiter $$

CREATE TABLE `hospital_quality_scores` (
  `ProviderNumber` varchar(8) NOT NULL,
  `HospitalName` varchar(50) DEFAULT NULL,
  `State` varchar(2) DEFAULT NULL,
  `MeasureCode` varchar(25) NOT NULL,
  `Question` longtext,
  `AnswerDescription` longtext,
  `AnswerPercent` int(11) DEFAULT NULL,
  `NumberofCompletedSurveys` varchar(50) DEFAULT NULL,
  `SurveyResponseRatePercent` varchar(50) DEFAULT NULL,
  `Footnote` longtext,
  PRIMARY KEY (`ProviderNumber`,`MeasureCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

任何人都有任何想法为什么会这样?似乎只有正确插入的记录。

2 个答案:

答案 0 :(得分:3)

您的主键是否阻止插入其他数据?

查找已使用ProviderNumber为“'050441'”和MeasureCode为“H_HSP_RATING_7_8”插入的记录,如果您有其中一个,那么这是一个重复的密钥问题。

您可能需要在主键上添加“AnswerDescription”才能解决此问题。

此致

戴夫

答案 1 :(得分:0)

实际上我在想也许你的问题更多地与第一个双引号值有关(即它被引用两次,如“'value'”),这可能导致你试图插入的值是'050441',不应该是050441。

无论如何,如果没有特殊处理,你将会插入额外的单引号,我想你可能并不想这样做。

祝您好运,并且您的所有代码都可以完美运行!

罗德尼