在MySQL中导入CSV数据时空整数字段的默认值

时间:2011-03-22 16:07:23

标签: mysql sql csv

我正在使用LOAD DATA INFILE将CSV导入MySQL表。其中一个表的字段存储了我在表结构contributor_zipcode INT中定义的邮政编码数据。

在CSV中,此字段有时为空。当我执行LOAD查询时,MySQL会发出如下警告:

Incorrect integer value: '' for column 'contributor_zipcode' at row 180

我尝试将字段重新定义为contributor_zipcode INT DEFAULT '0',这会产生相同的警告,而contributor_zipcode INT DEFAULT NULL则是MySQL不允许的。有什么建议吗?

3 个答案:

答案 0 :(得分:12)

空值被解释为空字符串(''),而不是NULL,因此未使用默认值。

如果要显式控制这些空字符串的处理,最好的办法是将它们加载到用户变量中,然后使用用户变量有条件地设置列。

您可以使用它将值设置为您想要的值(NULL,0等)。

以下是一个示例,假设您要将其设置为0:

LOAD DATA INFILE '...'
INTO TABLE your_table
FIELDS TERMINATED BY ','
(column_one,..., @contributor_zipcode,..., column_n)
SET contributor_zipcode = IF(@contributor_zipcode='',0,@contributor_zipcode);

答案 1 :(得分:1)

在Csv中,我取代了所有的""用" \ N"在运行脚本之前,这会在db

中创建一个空字段

答案 2 :(得分:0)

对于某些元素(例如邮政编码),默认值可能更好null,而不是0

假设您有一张名为({1}}的人名表。

People

接下来,将create table People ( id int, first_name varchar(30), last_name varchar(50), city varchar(50), state varchar(50), zip int ); 加载到file.csv表格中。 注意最后一行(以People开头),如果文件中的值为set(也称为空字符串),则zip分配null

""