2

我正在使用 LOAD DATAINFILE 导入 csv 文件

csv 列是名称、类型、状态

我的表结构是

名称:varchar
类型 : Varchar
状态:Tiny int 默认值 1

我使用这个 stmt :

LOAD DATA INFILE '/var/www/names.csv' 
INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES 

当我使用上面的语句时,它必须为每一行插入状态值 1,但它没有插入相同的值。请指教。

4

2 回答 2

9

加载文件时,MySQL 期望它具有与目标表相同的列数,除非您另外指定,即使缺少的列具有默认值。因此,为您的语句提供一个列列表LOAD,并为 的值提供文字 1 STATUS

LOAD DATA INFILE '/var/www/names.csv' 
INTO TABLE users 
  FIELDS TERMINATED BY ',' 
  ENCLOSED BY '"' 
  LINES TERMINATED BY '\n' 
  IGNORE 1 LINES 
  (`name`, `type`, 1)

你也可以用一个SET子句来做到这一点:

LOAD DATA INFILE '/var/www/names.csv' 
INTO TABLE users 
  FIELDS TERMINATED BY ',' 
  ENCLOSED BY '"' 
  LINES TERMINATED BY '\n' 
  IGNORE 1 LINES 
  (`name`, `type`)
  SET `status` = 1
于 2012-06-05T12:52:50.977 回答
0

执行查询后,使用以下命令检查任何警告

show warnings

数字数据类型的默认值为 0,字符串的默认值为 ''。

所以你应该在创建表时设置默认值 1

create table tableName
(
name nvarchar(100) not null,
type nvarchar(100) not null,
status smallint default 1
);
于 2012-06-05T12:49:52.390 回答