Mysql-没有空格的数据
我想导入以下数据(字段之间不带分隔符): 这就是结构Mysql-没有空格的数据,mysql,sql,Mysql,Sql,我想导入以下数据(字段之间不带分隔符): 这就是结构 CREATE TABLE `tabla008` ( `numclien` varchar(8) NOT NULL DEFAULT '', `centidad` varchar(4) NOT NULL DEFAULT '', `coficina` varchar(4) NOT NULL DEFAULT '', `digcontr` varchar(2) NOT NULL DEFAULT '', `ccuenta` varch
CREATE TABLE `tabla008` (
`numclien` varchar(8) NOT NULL DEFAULT '',
`centidad` varchar(4) NOT NULL DEFAULT '',
`coficina` varchar(4) NOT NULL DEFAULT '',
`digcontr` varchar(2) NOT NULL DEFAULT '',
`ccuenta` varchar(8) NOT NULL DEFAULT '',
`clainter` varchar(1) NOT NULL DEFAULT '',
`secinter` varchar(2) NOT NULL DEFAULT '',
`fealrela` varchar(10) NOT NULL DEFAULT '0000-00-00',
`space1` varchar(1) NOT NULL DEFAULT '',
`fechape` varchar(10) NOT NULL DEFAULT '0000-00-00',
`space2` varchar(1) NOT NULL DEFAULT '',
`fecancel` varchar(10) NOT NULL DEFAULT '0000-00-00',
`peyestat` varchar(1) NOT NULL DEFAULT '',
`indaviso` varchar(1) NOT NULL DEFAULT '',
`iugestor` varchar(6) NOT NULL DEFAULT '',
`pehstamp` varchar(26) NOT NULL DEFAULT '',
`indcoext` varchar(1) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
(我必须把所有的东西都放在VARCHAR中进行测试)
然后,我想用下面的SQL语句导入这些数据
LOAD DATA LOCAL INFILE 'c:/mis/RBA/RBACalidad/Entradas/PEBC.PEFD.FIX.UNLO.TABLA008.D1140813.TXT'
INTO TABLE tabla008
FIELDS TERMINATED BY '' LINES TERMINATED BY '\r\n';
但是,当运行它时,结果是:
结果必须是:
我不明白为什么会有这样的结果,如果我的SQL语句很好的话
谢谢您的问题有两方面:
- 导入文件不适合表列定义
- 您的加载语句不考虑CSV文件 的正确语法。
字段以“
”结尾,这意味着根本没有字段分隔符。因此,列长度适用于:
您的行和字段长度:
20232045001100000700002769T011998-01-22 0001-01-01
^ split into "numclien"
^split in to "centidad"
...
如果您的CSV包含选项卡(\t),请更改为
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n';
这将是正常的csv语法。例如,文件包含一个或多个空格作为字段分隔符。你可以试试
FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\r\n';
但我希望这会在行中生成空字段。最好是处理文件,并用制表符替换空格序列
最后,csv应该适合列的长度,或者列应该有相应的类型集(如日期、时间戳等,请参见上面的注释)好吧,我不想这样做,但我做到了 我用这个:
LOAD DATA LOCAL INFILE 'c:/mis/RBA/RBACalidad/Entradas/TABLA008.D1140813.TXT'
INTO TABLE tabla008
(@row)
SET numclien=SUBSTRING(@row,1,8),
entidad=SUBSTRING(@row,9,4),
oficina=SUBSTRING(@row,13,4),
digcontrol=SUBSTRING(@row,17,2),
cuenta=SUBSTRING(@row,19,8),
clainter=SUBSTRING(@row,27,1),
secinter=SUBSTRING(@row,28,2),
fealrela=SUBSTRING(@row,30,10),
space1=SUBSTRING(@row,40,1),
fechape=SUBSTRING(@row,41,10),
space2=SUBSTRING(@row,51,1),
fecancel=SUBSTRING(@row,52,10),
space3=SUBSTRING(@row,62,1),
peyestat=SUBSTRING(@row,63,1),
indaviso=SUBSTRING(@row,64,1),
iugestor=SUBSTRING(@row,65,6),
pehstamp=SUBSTRING(@row,71,26),
indcoext=SUBSTRING(@row,97,1);
这不是一个优雅的解决方案,但它可以工作您能提供应该输出的内容吗?根据您提供的图像,我只能推测这是由于变量的长度造成的。好的,我编辑了这篇文章。@Alexander您应该了解有关MySQL
数据类型的更多信息。每种不同的数据都有特定的数据类型,相反,您将所有数据都设置为类型varchar
,考虑到您拥有的数据,这是非常糟糕的!嗨,我把所有字段的VARCHAR()作为测试。我无法修改输入。我已经验证了导入文件yes是否适合表列定义,两者的长度都是96。我将字段以“”结尾,因为没有分隔符。我尝试过以“”结尾的字段,但结果是其他(不好)字段,有些字段没有希望,只要不能通过分隔符或适当的长度区分字段,这就行不通;只要输入没有硬编码在你服务器的bios中,你就可以修改——即使在那里,你也可以复制一份。。。
LOAD DATA LOCAL INFILE 'c:/mis/RBA/RBACalidad/Entradas/TABLA008.D1140813.TXT'
INTO TABLE tabla008
(@row)
SET numclien=SUBSTRING(@row,1,8),
entidad=SUBSTRING(@row,9,4),
oficina=SUBSTRING(@row,13,4),
digcontrol=SUBSTRING(@row,17,2),
cuenta=SUBSTRING(@row,19,8),
clainter=SUBSTRING(@row,27,1),
secinter=SUBSTRING(@row,28,2),
fealrela=SUBSTRING(@row,30,10),
space1=SUBSTRING(@row,40,1),
fechape=SUBSTRING(@row,41,10),
space2=SUBSTRING(@row,51,1),
fecancel=SUBSTRING(@row,52,10),
space3=SUBSTRING(@row,62,1),
peyestat=SUBSTRING(@row,63,1),
indaviso=SUBSTRING(@row,64,1),
iugestor=SUBSTRING(@row,65,6),
pehstamp=SUBSTRING(@row,71,26),
indcoext=SUBSTRING(@row,97,1);