【发布时间】: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 行不包含所有列的数据
我查看了this 和this 问题的答案,但都没有解决我的问题。
表创建查询:
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 方面为您提供进一步的帮助,但我会进一步调查,看看您能找到什么。如果没有什么我可以帮助替换''的程序,但这取决于你。