将 csv 文件中的第一行第一列导入到 mariadb 表中,且不存在空间

问题描述 投票:0回答:1

我正在 Windows 上导入 csv 文件:

3K;Cartridge/CHRA/Core Assy;B9DC3A;96,11;1057,21;1371,48;36,21;1602,78;54357100500;328;;;54357100500;;
3K;Cartridge/CHRA/Core Assy;D6EC42;483,95;5323,45;5603,62;10,53;6548,67;13877100500;328;;;13877100500;;
3K;Cartridge/CHRA/Core Assy;D79352;132,45;1456,95;1831,50;31,99;2140,39;53037100501;328;;;53037100501;;
3K;Cartridge/CHRA/Core Assy;D79353;119,08;1309,88;1683,33;34,94;1967,23;53037100502;328;;;53037100502;;
3K;Cartridge/CHRA/Core Assy;D79354;164,09;1804,99;2299,99;33,80;2687,88;53037100503;328;;;53037100503;;

在此数据库中:

CREATE DATABASE db
  DEFAULT CHARACTER SET 'utf8'
  DEFAULT COLLATE 'utf8_general_ci';

CREATE TABLE IF NOT EXISTS oo (
  id INT NOT NULL AUTO_INCREMENT,
  iid VARCHAR(255),
  prod VARCHAR(255),
  grp VARCHAR(255),
  al VARCHAR(255),
  ap VARCHAR(255),
  mp VARCHAR(255),
  ic VARCHAR(255),
  td VARCHAR(255),
  td_p INT,
  add_inf TEXT,
  INDEX( iid ),
  PRIMARY KEY( id )
);

使用此命令:

LOAD DATA LOCAL INFILE 'd:\\inn.csv' 
  INTO TABLE `oo`
  CHARACTER SET 'utf8'
  FIELDS TERMINATED BY ';'
  OPTIONALLY ENCLOSED BY '\"'
  ESCAPED BY '\"'
  LINES TERMINATED BY '\r\n'
  ( prod, grp, ic, @dummy, @dummy, @dummy, @dummy, @dummy, @td, td_p, @dummy, @dummy, al, ap, mp, @add1, @add2 )
  SET
    td = @td,
    iid = concat( @td, '--', @prod ),
    add_inf = concat( @add1, @add2 );

第一行第一列旁边的一切都很完美,这在开头产生了额外的空间。我不知道它从哪里来。我尝试过设置

prod = REPLACE( @prod, ' ', ''),
,但没有帮助。 csv 文件第一行第一列没有空格,并且采用 utf-8 带 BOM 编码。

这就是输出的样子:

csv import mariadb
1个回答
0
投票

感谢@Ken White,我发现了一个问题以及如何解决它。

它是带有 BOM 的 UTF-8 编码,我认为 Mariadb 需要它以正确的方式导入文件,但我发现它只是产生了这个“错误”。也许它只在 Windows 上。

我在 Notepad++ 中找不到或看到该符号,但我在 Total Commander 查看器中找到了它,它看起来像这样:

事实上这不是一个错误,它只是对于使用带 BOM 的 UTF-8 编码的文件来说不是可打印的标志,而所需的一切只是将文件转换为“正常”不带 BOM 的 UTF-8 编码。

希望这个答案可以帮助到有同样问题的人。

© www.soinside.com 2019 - 2024. All rights reserved.