MySQL导入CSV报错1262:行数据截断问题求助
解决MySQL LOAD DATA导入CSV时的1262错误
问题分析
报错Error Code: 1262. Row 1 was truncated; it contained more data than there were input columns的核心原因是字段闭合符设置错误,导致MySQL无法正确识别CSV字段的边界,错误地将单个字段拆分成多个列,从而触发行截断提示。
你的CSV字段使用双引号包裹,但在LOAD DATA语句中你写的是ENCLOSED BY '"'——这是HTML实体转义,MySQL无法识别这个语法,因此无法正确解析字段的起始和结束位置。另外,你手动用REPLACE去除双引号的操作是冗余的,当ENCLOSED BY设置正确时,MySQL会自动剥离字段周围的双引号。
修正后的导入语句
LOAD DATA INFILE 'krupka_lezaky.csv' INTO TABLE table_lezaky_krupka5 FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 修正为MySQL能识别的双引号写法 LINES TERMINATED BY '\r\n' -- 若CSV是Windows生成的用这个,Linux/macOS用'\n' IGNORE 1 LINES (@var1, @var2, NAZEV, DOPLNEK, @var5, @var6, @var7, @var8, @var9, @var10, @var11, @var12) SET ID_ZBOZI = @var1, -- 无需手动去双引号,MySQL已自动处理 ID_CISELNIK = @var2, MNOZSTVI = REPLACE(@var5, ',', '.'), -- 仅替换小数分隔符 NCENA_BD = REPLACE(@var6, ',', '.'), NCENA_SD = REPLACE(@var7, ',', '.'), PCENA_SD = REPLACE(@var8, ',', '.'), PCENA_RP = REPLACE(@var9, ',', '.'), DAT_PRIJEM = CASE WHEN @var10 != '' THEN STR_TO_DATE(@var10, '%d.%m.%Y %H:%i:%s') ELSE NULL END, DAT_VYDEJ = CASE WHEN @var11 != '' THEN STR_TO_DATE(@var11, '%d.%m.%Y %H:%i:%s') ELSE NULL END, KOD_VZP = @var12, ID_PROVOZOVNA = 4;
额外说明
- 换行符适配:如果你的CSV是在Windows系统生成的,换行符通常是
\r\n,Linux/macOS则是\n,根据实际情况调整LINES TERMINATED BY参数。 - 空日期处理:添加
CASE判断是为了避免空字符串传入STR_TO_DATE导致的警告(虽然不影响导入,但能让日志更干净)。 - 字段类型匹配:
ID_ZBOZI是int类型,当@var1被正确解析为数字字符串时,MySQL会自动转换为整数,无需额外处理。
内容的提问来源于stack exchange,提问作者Tireur
相关产品推荐
相关产品推荐

