2

我即将将一个大 (500 MB) *.csv 文件导入 MySQL 数据库。

我就这样:

LOAD DATA INFILE '<file>'
    REPLACE
    INTO TABLE <table-name>
    FIELDS
        TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '"'
    IGNORE 1 LINES ( #Header
        <column-name1>,
        <column-name2>,
        ...
    );

我对其中一个列有问题(它的数据类型是 int) - 我收到一条错误消息:

错误代码:1366 不正确的整数值:行列的“”

我查看了 *.csv 文件中的这一行。导致错误的单元格内部只有一个空格(如下所示:...; ;...)。

如何告诉 SQL 忽略此列中的空格?

由于 *.csv 文件非常大,之后我必须导入更大的文件,所以我想避免编辑 *.csv 文件;我正在寻找一个 SQL 解决方案。

4

2 回答 2

4

像这样添加一个 SET COLUMN:

LOAD DATA INFILE 'file.txt'
  INTO TABLE t1
  (column1, @var1)
  SET column2 = @var1/100;

您需要将 @var1/100 替换为处理“空间”并转换为 -Infinity 或 0 或 42 的表达式...不确定..

于 2011-02-09T09:35:44.300 回答
0

这个答案最初作为@speendo 的编辑包含在问题中;我已将其转换为正确的答案。


解决方案是:

LOAD DATA INFILE '<file>'
    REPLACE
    INTO TABLE <table-name>
    FIELDS
        TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '"'
    IGNORE 1 LINES ( #Header
        <column-name1>,
        <column-name2>,
        @var1 #the variable that causes the problem
        ...
    )
    SET <column-name-of-problematic-column> = CASE
        WHEN @var1 = ' ' THEN NULL
        ELSE @var1
    END
;
于 2021-08-11T17:11:49.047 回答