MySQL导入CSV时Industry_Code字段报ERROR 1366 (HY000)错误求助
看起来你遇到的问题是MySQL没能正确解析CSV里的整数字段,反而把带引号的数值当成了非法字符串。咱们一步步来拆解问题和解决办法:
错误原因分析
从报错信息Incorrect integer value: ''"6029"''能看出来,MySQL接收到的Industry_Code值是带嵌套引号的(也就是CSV里的"6029"被错误识别成了包含双引号的字符串),而你的字段是bigint类型,自然无法把带引号的字符串转成整数。至于空值没报错,是因为CSV里的""会被MySQL默认处理成NULL(只要你的字段允许NULL),所以不会触发类型错误。
具体解决步骤
正确配置LOAD DATA的CSV格式参数
这是最关键的一步!你需要在导入命令里明确告诉MySQL,CSV的字段是用双引号包裹的,这样它才会自动去掉引号读取里面的数值。示例命令如下:LOAD DATA INFILE '/path/to/your/import_file.csv' INTO TABLE your_target_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 告诉MySQL字段用双引号包裹 LINES TERMINATED BY '\n' IGNORE 1 LINES; -- 如果你的CSV有表头行,记得加上这行忽略表头处理字段内的双引号转义(如果需要)
如果你的CSV里存在字段内容本身包含双引号的情况(比如某个公司名称是"ABC" Corp),CSV通常会用双引号转义双引号(写成"""ABC"" Corp"),这时候你需要在导入命令里加上转义规则:LOAD DATA INFILE '/path/to/your/import_file.csv' INTO TABLE your_target_table FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"' -- 处理字段内部的双引号转义 LINES TERMINATED BY '\n' IGNORE 1 LINES;校验CSV数据的一致性
你提供的第10行数据后面的字段是空的(""),这没问题,但要确保所有Industry_Code的非空值都是纯数字,没有额外的空格、制表符或者特殊字符。可以用文本编辑器的正则搜索"[0-9]+"来快速检查是否有异常格式的数值。临时关闭严格模式(仅用于排查)
如果上面的方法都没解决,作为临时排查手段,你可以临时关闭MySQL的严格SQL模式,让它自动尝试转换不符合类型的值:SET sql_mode = '';导入完成后一定要记得恢复严格模式,避免后续数据出现隐患:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
内容的提问来源于stack exchange,提问作者Mahmoud Yassine

