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

MySQL 8.0中LOAD DATA LOCAL INFILE导入含逗号字段异常问题问询

解决MySQL LOAD DATA导入时数值字段逗号截断问题

针对你遇到的带千分位逗号的数值字段被截断的问题,可以通过以下方案解决:

方案一:用变量接收字段并清洗数据

修改LOAD DATA语句,先用用户变量接收所有字段,再通过REPLACE函数移除数值中的逗号后赋值给目标字段,确保完整解析带千分位的数值:

LOAD DATA LOCAL INFILE "C:/PRINT DAILY DOC_CommaDelimited.txt"
INTO TABLE daily_doc_report_full
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 5 LINES
(@col1, @col2, @col3, @col4, @col5) -- 按顺序用变量接收每个字段
SET 
    -- 替换成你表中实际的字段名,TRIM用于去除字段前后冗余空格
    doc_id = TRIM(@col1),
    department = TRIM(@col2),
    current_value = TRIM(@col3),
    Month_to_date = REPLACE(TRIM(@col4), ',', ''), -- 移除千分位逗号
    other_field = TRIM(@col5); -- 有更多字段可继续添加

方案二:确认目标字段类型

确保Month_to_date字段的类型为DECIMAL(12,2)(推荐,避免精度丢失)或DOUBLE,不要使用整数类型(如INT)。整数类型会自动截断逗号后的内容,导致仅保留-285。

备选方案:通过临时表中转导入

如果直接导入仍有问题,可以先将数据导入临时表的字符串字段,清洗后再插入目标表,规避解析错误:

-- 创建临时表
CREATE TEMPORARY TABLE temp_import (
    col1 VARCHAR(50),
    col2 VARCHAR(100),
    col3 VARCHAR(50),
    col4 VARCHAR(50),
    col5 VARCHAR(50)
);

-- 导入临时表
LOAD DATA LOCAL INFILE "C:/PRINT DAILY DOC_CommaDelimited.txt"
INTO TABLE temp_import
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 5 LINES;

-- 清洗后插入目标表
INSERT INTO daily_doc_report_full (doc_id, department, current_value, Month_to_date, other_field)
SELECT 
    TRIM(col1),
    TRIM(col2),
    TRIM(col3),
    CAST(REPLACE(TRIM(col4), ',', '') AS DECIMAL(12,2)),
    TRIM(col5)
FROM temp_import;

-- 删除临时表
DROP TEMPORARY TABLE temp_import;

内容的提问来源于stack exchange,提问作者Ethan Graybeal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:12:43