使用mysql load data infile我得到了“不正确的整数值”

clj7thdc  于 2023-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(141)
LOAD DATA INFILE 'thefile.csv' 
INTO TABLE word 
FIELDS TERMINATED BY ';'
IGNORE 1 LINES
SET id = NULL;

我有点迷失在这里做什么,我以为这个查询会工作,但它不。我得到了关于id的错误,这就是为什么我认为set id = NULL会使它变好,但事实并非如此。我的id行(即AUTO_INCREMENT)的要点是我不需要指定ID。所以...如果你能帮忙我会非常感激

Incorrect integer value: '' for column 'id' at row 1

我的CSV文件内容:

id;meaning;japanese;kanji;kana;romaji;visible;featured;image;image_author;imgauthor_link;extra
;pants;パンツ;;パンツ;pantsu;;;;;;
z31licg0

z31licg01#

必须指定除id列以外的所有列名:

LOAD DATA INFILE 'thefile.csv' 
INTO TABLE word 
FIELDS TERMINATED BY ';'
IGNORE 1 LINES
(col1,col2,col3);

我假设你的表有(id,col1,col2,col3)列。

yhived7q

yhived7q2#

可以使用两步加载:
1)将数据加载到表中;
2)使用INSERT INTO ... SELECT ... FROM获取表中的数据
示例:

CREATE TABLE baseData (
    All your column definitions, but not your id column
);

INSERT INTO (all your columns except the id column) SELECT * FROM baseData;

备选方案:
以id作为最后一列创建表,然后使用LOAD DATA INFILE进行加载

xytpbqjk

xytpbqjk3#

在我的例子中,这个错误发生在其他列中,而不是主键。
解决方案是将任何空值替换为\N,而不是将它们保留为,,。

cat example.csv
1,foobar,1,0,1
2,barfoo,,,
3,foofoo,,,

可以使用sed将空值替换为\N个null值。

cat example.csv | sed   -e ':a' -e 's/,,/,\\N,/g;  s/,$/,\\N/g; ta'
1,foobar,1,0,1
2,barfoo,\N,\N,\N
3,foofoo,\N,\N,\N

注意:使用\N而不是\n。

相关问题