MySQL中INT类型customerid列整数前出现“|”是什么原因?如何修复?


出现该现象的核心原因
- 最常见的是导入customer表时的分隔符配置和源文件实际分隔符不匹配:比如源文件实际用
|作为字段分隔符,你导入时误设置成了其他符号,导致MySQL把相邻列的内容直接拼到了customerId列末尾,|后面的数字本来是该行下一个字段的内容。orders表导入时分隔符配置正确,所以没有该问题。 - 其次是customer源文件本身存在脏数据,部分行的customerId字段自带
|加数字的内容,而orders表的源文件没有这类异常数据。 - 少数情况是导入customer表时行结束符、是否忽略表头行的配置错误,导致行内容拼接错位。
修复方案
第一步先排查根因
随便找一个customer表中带|的customerId值,到原始平文件中搜索对应行,确认是源文件本身的问题还是导入配置的问题。
对应修复操作
- 如果是导入配置错误:重新导入customer表即可,导入前确认源文件的实际字段分隔符(常见为逗号、制表符
\t、分号、|),用LOAD DATA命令导入的话示例如下,可视化工具导入对应修改分隔符配置项即可:
LOAD DATA INFILE '你的customer源文件本地路径' INTO TABLE customer FIELDS TERMINATED BY '|' -- 此处替换为源文件实际的分隔符 ENCLOSED BY '"' -- 如果字段值用双引号包裹就加该配置,没有可以去掉 LINES TERMINATED BY '\n' -- 按实际行结束符修改,Windows系统的文件可能是'\r\n' IGNORE 1 ROWS; -- 如果源文件第一行是表头就加该配置,否则去掉
- 如果是源文件本身有脏数据,不需要重新导入的话可以直接用SQL批量修正字段值:
-- 先查询确认修正后的值符合预期 SELECT customerId, SUBSTRING_INDEX(customerId, '|', 1) AS fixed_customer_id FROM customer; -- 确认无误后执行更新 UPDATE customer SET customerId = SUBSTRING_INDEX(customerId, '|', 1); -- 可选操作:校验customerId是否有重复 SELECT customerId, COUNT(*) AS id_count FROM customer GROUP BY customerId HAVING id_count > 1;
- 修复完成后可以执行关联查询校验两个表的customerId一致性:
-- 查询结果为0说明两个表的customerId已经完全匹配 SELECT COUNT(*) FROM customer c LEFT JOIN orders o ON c.customerId = o.customerId WHERE o.customerId IS NULL;
内容的提问来源于stack exchange,提问作者Lynn_Feng
相关产品推荐
相关产品推荐

