MySQL INT列如何填充NULL?解决LOAD DATA导入自动填0问题
解决MySQL导入CSV时INT列空值被填充为0的问题
当然可以在INT列中存储NULL值,只要该字段没有被设置NOT NULL约束即可。以下是具体实现方法:
1. 确保表字段允许存储NULL
创建表时,明确指定fav_digit字段允许NULL(MySQL默认字段允许NULL,显式声明更清晰):
CREATE TABLE your_table ( ID INT, NAME VARCHAR(7), fav_digit INT NULL -- 允许存储NULL值 );
2. 修改LOAD DATA导入语句
MySQL默认会将INT列的空值转换为0,我们需要通过语句设置,让空值被识别为NULL:
方法一:使用NULL ''指定空值映射
在LOAD DATA语句中添加NULL '',表示将CSV中的空字符串(无数据的字段)映射为NULL:
LOAD DATA LOCAL INFILE '/your/file/path/data.csv' INTO TABLE your_table FIELDS TERMINATED BY ' ' -- 根据你的CSV实际分隔符调整,比如逗号','或制表符'\t' LINES TERMINATED BY '\n' IGNORE 1 LINES -- 跳过CSV的表头行 (ID, NAME, fav_digit) NULL ''; -- 将空字段值转为NULL
方法二:使用用户变量+NULLIF函数(更灵活)
先将字段值读取到临时变量,再通过NULLIF函数把空字符串转为NULL,适合处理复杂的空值场景:
LOAD DATA LOCAL INFILE '/your/file/path/data.csv' INTO TABLE your_table FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n' IGNORE 1 LINES (ID, NAME, @temp_fav) SET fav_digit = NULLIF(@temp_fav, '');
注意事项
- 请根据你的CSV实际分隔符调整
FIELDS TERMINATED BY的参数,比如如果字段用逗号分隔就改为',',如果是多个空格或制表符,对应改为'\t'。 - 如果CSV字段包含空格,建议使用
OPTIONALLY ENCLOSED BY '"'来包裹字段,避免分隔符识别错误。
内容的提问来源于stack exchange,提问作者Devarapalli Vamsi
相关产品推荐
相关产品推荐

