首页 > 解决方案 > 可选封闭不工作,逗号打破上传

问题描述

我有这张桌子:

CREATE TABLE my_table(
    trans_id INT NOT NULL AUTO_INCREMENT,
    spend decimal(10,2),
    impressions int,
    PRIMARY KEY (trans_id)
);

这是我的负载语句:

LOAD DATA LOCAL INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/my_file.csv' 
INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS
(spend, impressions);

spend我将有一个带逗号的十进制值,例如:1193.72。

spend字段上传为 1。后面的impressions字段正确且不受影响。

示例记录:2021 年 1 月 19 日 | 1,193.72 | 92780

输出:2021 年 1 月 19 日 | 1 | 92780

我的印象包括optionally enclosed by '"'会解决这个问题,对于其他文本字段,它似乎可以按预期工作,但在这里它给我带来了问题。

标签: mysqlsql

解决方案


MySQL 不支持使用千位分隔符格式化的数字文字的输入。

最好的解决方案是在您尝试使用 LOAD DATA INFILE 之前预处理您的输入文件。否则,您可以执行此解决方法:

LOAD DATA LOCAL INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/my_file.csv' 
INTO TABLE my_table 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS
(@tmp_spend, impressions)
SET spend = REPLACE(@tmp_spend, ',', '');

这会将支出值存储到临时变量中,而不是直接存储到列中。用户定义的变量始终是字符串类型。然后,您可以从该字符串中删除逗号,然后再将其分配给数字支出列。


推荐阅读