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);