Mysql 可选封闭不工作,逗号中断上传

Mysql 可选封闭不工作,逗号中断上传,mysql,sql,Mysql,Sql,我有这张桌子: CREATE TABLE my_table( trans_id INT NOT NULL AUTO_INCREMENT, spend decimal(10,2), impressions int, PRIMARY KEY (trans_id) ); 这是我的load语句: LOAD DATA LOCAL INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/my_file.csv' INTO

我有这张桌子:

CREATE TABLE my_table(
    trans_id INT NOT NULL AUTO_INCREMENT,
    spend decimal(10,2),
    impressions int,
    PRIMARY KEY (trans_id)
);
这是我的load语句:

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上传。下面的
印象
字段正确且不受影响

示例记录:1/19/2021 | 1193.72 | 92780

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


我当时的印象是,如果将
包含在可选的“”
中,就可以解决这个问题,而对于其他文本字段,它似乎可以像预期的那样工作,但这给我带来了问题。

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

最好的解决方案是在尝试使用加载数据填充之前对输入文件进行预处理。否则,您可以执行以下解决方法:

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, ',', '');

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

类似于
“1,2,3”的CSV字符串“
不能存储在整数列中。可能包括一些来自
my_file.csv
@TimBiegeleisen的代表行,添加了一个示例记录和输出