使用MySQL Import Wizard导入CSV时含空值行未导入的解决方法
解决MySQL Import Wizard导入CSV时含NULL行未导入的问题
1. 先检查CSV里NULL值的写法
MySQL导入向导默认只认**NULL(大写、不带引号)**作为空值标记。如果你的CSV里是空单元格、小写null、N/A或者空引号"",向导会把这些当成普通字符串。要是目标表对应的字段设了NOT NULL约束,整行就会因为不符合要求被跳过。
- 处理办法:把CSV里所有空值、替代标记统一改成
NULL;要是字段允许存空字符串,也可以在导入时开个选项把空字符串转成NULL。
2. 检查目标表的字段约束
打开目标表的结构,看看那些有NULL值的字段是不是设了NOT NULL:
- 要是字段本来就该允许空,直接执行这条SQL改表结构:
ALTER TABLE 你的表名 MODIFY COLUMN 字段名 字段类型 NULL; - 要是业务上字段不能空,那得补全CSV里的对应值,或者给字段设个默认值再导入。
3. 调整导入向导的高级设置
导入的时候进到**"高级选项"**:
- 勾选**"将空字符串视为NULL"**,这样CSV里的空单元格会被识别成NULL;
- 确认**"NULL字符串"**的设置是
NULL,如果你的CSV用的是\N这类特殊标记,在这里改成对应的值就行。
4. 换用LOAD DATA INFILE命令(更灵活)
要是向导搞不定,直接用SQL命令导入,能精准控制空值处理:
LOAD DATA INFILE '你的CSV文件路径' INTO TABLE 你的表名 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES -- 有表头的话忽略第一行 (字段1, 字段2, @字段3) -- 用变量接收可能的空值 SET 字段3 = NULLIF(@字段3, ''); -- 把空字符串转成NULL
- 可以根据你的CSV实际情况修改分隔符、引号参数;
NULLIF函数还能把N/A这类自定义标记转成NULL,把第二个参数换成你的标记就行。
5. 看错误日志找原因
要是还是有行没导入,去看MySQL的错误日志(一般在/var/log/mysql/error.log或者安装目录的data文件夹里),日志里会写清楚为啥失败,比如约束违反、数据类型不对,照着改就行。
内容的提问来源于stack exchange,提问作者xing lee
相关产品推荐
相关产品推荐

