2012-06-05 68 views
1

不插入我使用LOAD DATAINFILE导入CSV文件LOAD DATA INFILE默认值表

的CSV列名称,类型,状态

我的表结构

 
Name : varchar 
TYPE : Varchar 
Status: Tiny int default value 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,但不插入相同的值。 请指教。

+1

是你的“线”真的终止与空间字符? – eggyal

+0

发布示例CSV数据。我怀疑你有''''行结束符而不是''\ n'' –

+0

是的,它必须是\ n –

回答

6

当加载一个文件,在MySQL中期望它有相同的号码作为目的地表中的列,除非另行指定,即使缺少的列有一个默认值。

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条款做到这一点:所以对于STATUS值提供列列表,你LOAD语句,文字1

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 
+0

感谢您解决了这个问题 –

0

后执行查询,使用

show warnings 

默认值检查任何警告为0,字符串数值数据类型和“”。

所以,你应该已经设置默认值1,而在创建表

create table tableName 
(
name nvarchar(100) not null, 
type nvarchar(100) not null, 
status smallint default 1 
);