You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSV导入MySQL后数据异常,如何修复该导入问题?

解决MySQL导入CSV数据异常问题

问题重现

创建表语句

CREATE TABLE credit_facility (
    id varchar(5) not null,     
    borrower varchar(6) not null, 
    category varchar(40) not null, 
    purpose varchar(30) not null, 
    committed varchar(6) not null, 
    value_date date not null, 
    maturity_date date not null, 
    currency varchar(6) not null, 
    extension varchar(2) not null, 
    co_borrower int not null
);

导入语句

SET GLOBAL local_infile=1; 
USE credit_facility; 
LOAD DATA LOCAL INFILE "/Users/lingleiqi/Desktop/test.csv" 
INTO TABLE credit_facility 
IGNORE 1 LINES;

CSV内容(多空格分隔)

id  borrower  category   purpose    committed    value_date     maturity_date     currency      extension  co_borrower
1   abc       credit     general    uncommitted  2023-11-12     2023-12-1         USD           no         xyz
2   efg       credit     general    uncommitted  2023-12-10     2022-09-04        EUR           no         hij

异常结果与报错

执行后数据库数据异常:

id  borrower  category   purpose    committed    value_date     maturity_date     currency      extension  co_borrower
1   abc                                            0000-00-00     0000-00-00                                  0
2   efg                                            0000-00-00     0000-00-00                                  0

报错信息:

1265 data truncated for column "id" at row 1
1261 row 1 doesn't contain data for all columns

错误原因

  1. 字段分隔符不匹配:MySQL的LOAD DATA默认使用制表符(\t)作为字段分隔符,但目标CSV用多个空格分隔字段。MySQL无法识别多空格为分隔符,会把整行开头的连续内容(如1 abc)塞进第一个字段id,导致字段截断,后续字段因无数据填充出现空值或默认值。
  2. 数据类型不匹配:表中co_borrower字段定义为INT NOT NULL,但CSV中该列的值是字符串(xyz、hij),无法转换为整数,MySQL自动将其设为0,同时触发数据截断错误。

修复步骤

步骤1:修正字段分隔符配置

在LOAD DATA语句中明确指定字段分隔符为空格,同时配置行分隔符:

SET GLOBAL local_infile=1; 
USE credit_facility; 
LOAD DATA LOCAL INFILE "/Users/lingleiqi/Desktop/test.csv" 
INTO TABLE credit_facility 
FIELDS TERMINATED BY ' '  -- 指定空格为字段分隔符,MySQL会将连续空格视为一个分隔符
OPTIONALLY ENCLOSED BY '' -- 字段无引号包裹,适配当前CSV格式
LINES TERMINATED BY '\n'  -- 指定行分隔符为换行符
IGNORE 1 LINES;

如果CSV实际是制表符分隔(仅显示为多空格),则将FIELDS TERMINATED BY ' '改为FIELDS TERMINATED BY '\t'。

步骤2:修正数据类型不匹配问题

二选一即可:

  • 方案A:修改表结构:将co_borrower改为字符串类型,匹配CSV数据:
    ALTER TABLE credit_facility MODIFY COLUMN co_borrower VARCHAR(20) NOT NULL;
    
  • 方案B:修改CSV内容:将CSV中co_borrower列的xyz、hij替换为合法整数值(如1、2)。

步骤3:验证导入结果

重新执行修正后的导入语句,查询表数据确认导入正常:

SELECT * FROM credit_facility;

内容的提问来源于stack exchange,提问作者LEIQI LING

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:23:19