我正在使用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不允许的。有什么建议吗?
答案 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
""