【问题标题】:Row 1 doesn't contain data for all columns第 1 行不包含所有列的数据
【发布时间】:2016-08-03 00:12:17
【问题描述】:

我正在尝试使用 Workbench 将 csv 上传到 MySQL,但到目前为止,我的所有尝试都没有结果。

我最初尝试使用“上传”功能,但它抱怨我有任何空/空字段。

我现在正在尝试使用此功能:

LOAD DATA infile 'C:\\temp\\SubEq.csv'
INTO TABLE cas_asset_register.subequipment
fields terminated BY ','
lines terminated BY '\n'
(seid, parentme, @vparentse, name, status, description, equipmenttype, comments, removed, active, @vsupplierid)
SET
ParentSE = nullif(@vparentse,''),
SupplierId = nullif(@vsupplierid,'')
;

但是,它似乎又在抱怨(可能)同样的事情:

错误代码:1261。第 1 行不包含所有列的数据

我查看了thisthis 问题的答案,但都没有解决我的问题。

表创建查询:

CREATE TABLE `subequipment` (
  `SEId` int(11) NOT NULL AUTO_INCREMENT,
  `ParentME` int(11) DEFAULT NULL,
  `ParentSE` int(11) DEFAULT NULL,
  `Name` varchar(255) DEFAULT NULL,
  `Status` varchar(100) DEFAULT NULL,
  `Description` varchar(255) DEFAULT NULL,
  `EquipmentType` int(11) DEFAULT NULL,
  `Comments` text,
  `Removed` tinyint(1) NOT NULL DEFAULT '0',
  `Active` tinyint(1) DEFAULT '1',
  `SupplierId` int(11) DEFAULT NULL,
  PRIMARY KEY (`SEId`),
  UNIQUE KEY `Unique_Constraint_ME` (`Name`,`ParentME`,`Active`),
  UNIQUE KEY `Unique_Constraint_SE` (`Name`,`ParentSE`,`Active`),
  KEY `ParentME` (`ParentME`),
  KEY `ParentSE` (`ParentSE`),
  KEY `EquipmentType` (`EquipmentType`),
  KEY `fk_subequipment_supplierequipment` (`SupplierId`),
  KEY `fk_subequipment_status_idx` (`Status`),
  CONSTRAINT `fk_subequipment_majorequipment` FOREIGN KEY (`ParentME`) REFERENCES `majorequipment` (`MEId`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_subequipment_status` FOREIGN KEY (`Status`) REFERENCES `componentstatus` (`StatusName`) ON UPDATE CASCADE,
  CONSTRAINT `fk_subequipment_subequipment` FOREIGN KEY (`ParentSE`) REFERENCES `subequipment` (`SEId`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fk_subequipment_supplierequipment` FOREIGN KEY (`SupplierId`) REFERENCES `supplierinfo_equipment` (`SupplierId`) ON UPDATE CASCADE,
  CONSTRAINT `fk_subequipment_userdefinedcode` FOREIGN KEY (`EquipmentType`) REFERENCES `userdefinedcode` (`UDCId`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

从我的上传查询中可以看出,我希望“ParentSE”和“SupplierId”为空,即使它们是外键字段。

csv 的每一行都被正确索引(即有 足够的字段来匹配表格):

1,1,,P7YCGPF,Abg va hfr,Nfcver Npre Yncgbc,13,"Qngr npdhverq: 61/52/7566
Zbqry: 0297T
Frevny Ahzore: YKE057551588125P16156",0,1,

怎么了?

【问题讨论】:

  • 你是说从 db 查询到 csv 你用什么工具从查询到 csv
  • 对不起@reds 我不太明白你的要求?
  • @Ben 看起来错误来自.csv 文件中的空字符串值。 Error 1261 是 MySQL 没有任何东西可插入而不是能够插入 NULL 的结果。因此,如果您的 .csv 文件类似于:'a', 'b', 'c', '', 'e' MySQL 不知道如何处理 '' 值,除非它从 '' 更改为 NULL,例如:'a', 'b', 'c', 'NULL', 'e'。我不确定我是否正确理解了您的问题,但如果这个答案似乎正确,我愿意提供进一步的帮助。
  • @ThoseKind 我觉得;就像您可能走在正确的轨道上一样,因为我期望这些值中至少有两个为空(因此SET ParentSE = nullif(@vparentse,'') 部分)。我只是不确定这是否正确实施
  • 您的NULLIF 语句看起来是正确的,所以我唯一能想到的另一件事是仔细检查.csv 文件,以确保它们确实包含您所期望的那些'' 空字符串。一旦你确认了这一点,我就看不出它为什么会出错。您可以编写一个脚本,将您的 .csv 文件解析为 '' 并将其替换为 NULL,但我不确定这是否适合您。抱歉,我无法在 MySQL 方面为您提供进一步的帮助,但我会进一步调查,看看您能找到什么。如果没有什么我可以帮助替换 '' 的程序,但这取决于你。

标签: mysql csv


【解决方案1】:

您在 csv 文件中的任何字段中的数据是否包含逗号?当您尝试将其上传到 MySQL 时,这会破坏字段终止标准。如果是这种情况,请尝试将其保存为制表符分隔的 txt 文件并替换

fields terminated BY ','

fields terminated BY '\t'

抱歉,如果这不是您问题的正确答案,我想将此作为评论发布,但我的声誉不够高:P

【讨论】:

  • 在 csv 中不应该有逗号的地方。正如您从摘录中看到的那样,错误出现在“第 1 行”,我已将其包括在内以进行比较。但是,我会将其保存为制表符分隔并重试。
【解决方案2】:

我的 CSV 文件的最后一行出现了同样的错误。这可能无法解决您的问题,但它解决了我的问题,并希望它对某人有所帮助。

对我来说,我需要在文件的最后一个回车符来换行。现在导入没有错误

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,比较 CSV 文件中的列和我的数据库中的表解决了这个问题。列数、列类型以及在某些情况下字符串类型的空值(例如,字符串类型的“”)应该相同。

    【讨论】:

      【解决方案4】:

      对我来说,问题是文件必须用制表符分隔。我读到一些用户报告说文件必须用分号分隔。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-05
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-22
        • 2016-04-15
        相关资源
        最近更新 更多