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
相关产品推荐
相关产品推荐

