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

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

table customer
table orders

出现该现象的核心原因

  • 最常见的是导入customer表时的分隔符配置和源文件实际分隔符不匹配:比如源文件实际用|作为字段分隔符,你导入时误设置成了其他符号,导致MySQL把相邻列的内容直接拼到了customerId列末尾,|后面的数字本来是该行下一个字段的内容。orders表导入时分隔符配置正确,所以没有该问题。
  • 其次是customer源文件本身存在脏数据,部分行的customerId字段自带|加数字的内容,而orders表的源文件没有这类异常数据。
  • 少数情况是导入customer表时行结束符、是否忽略表头行的配置错误,导致行内容拼接错位。

修复方案

第一步先排查根因

随便找一个customer表中带|的customerId值,到原始平文件中搜索对应行,确认是源文件本身的问题还是导入配置的问题。

对应修复操作

  1. 如果是导入配置错误:重新导入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; -- 如果源文件第一行是表头就加该配置,否则去掉
  1. 如果是源文件本身有脏数据,不需要重新导入的话可以直接用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;
  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:54:08