MySQL 5.7加载CSV空值至INT字段问题求助(Windows 10环境)
解决MySQL 5.7加载CSV时INT字段NULL值的问题
针对你在Windows 10 Pro下用MySQL 5.7处理Census-FactFinder CSV文件的场景,我给你几个实用的解决方案,帮你把CSV里的NULL值正确导入到INT类型字段中:
方案1:用LOAD DATA INFILE的NULL子句直接映射
这是最简洁的方法,适合CSV里用空字符串或者**"NULL"字符串**表示缺失值的情况:
如果你的CSV中空值代表NULL(比如某列是空的),执行以下SQL:
LOAD DATA INFILE 'C:/your/csv/path/census_data.csv' INTO TABLE your_table_name -- 替换成你的表名 FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- Census的CSV通常用双引号包裹字段,需匹配 LINES TERMINATED BY '\r\n' -- Windows系统换行符是\r\n,必须指定 NULL '' -- 告诉MySQL:遇到空字符串就转成NULL (SERIALNO, DIVISION, PUMA, REGION, ST, ADJHSG);
如果你的CSV里是用字符串"NULL"表示缺失值,把上面的NULL ''改成NULL 'NULL'即可。
方案2:用NULLIF函数手动转换
如果方案1不生效(比如CSV里的空值处理比较复杂),可以通过变量中转+NULLIF函数精准控制:
LOAD DATA INFILE 'C:/your/csv/path/census_data.csv' INTO TABLE your_table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' -- 先把所有字段读到变量里 (@serialno, @division, @puma, @region, @st, @adjhsg) SET SERIALNO = @serialno, -- 主键非空,直接赋值 DIVISION = NULLIF(@division, ''), -- 空字符串转NULL PUMA = NULLIF(@puma, ''), REGION = NULLIF(@region, ''), ST = NULLIF(@st, ''), ADJHSG = NULLIF(@adjhsg, '');
如果CSV里是"NULL"字符串,把NULLIF里的''换成'NULL'就行。
Windows环境专属注意事项
- 文件路径要用斜杠
/或者双反斜杠\\,比如C:/data/census.csv,避免MySQL解析路径出错。 - 如果用
LOAD DATA LOCAL INFILE(从本地文件加载),需要先在MySQL客户端开启本地加载权限:
同时要确保你的my.ini(MySQL配置文件)里有SET GLOBAL local_infile = 1;local_infile=1的配置,避免重启后失效。 - 测试时可以先导入少量数据验证,比如加
LIMIT 10子句,再用SELECT * FROM your_table WHERE DIVISION IS NULL;检查是否正确导入NULL值。
内容的提问来源于stack exchange,提问作者René Martínez
相关产品推荐
相关产品推荐

