加载数据文本字段与数字逗号交互

LOAD Data text fields vs numeric comma interactions

我正在使用以下方法将 csv 文件加载到 mysql 数据库:

LOAD DATA LOCAL INFILE 'file_location.csv' 
INTO TABLE social_spend 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS

我有一个文本字段,写为:'D,i,Y',上传后在我的数据库中显示为:'D,i,Y'

我有一个数字字段,写为:'1,234',在上传到:'1'

时自动截断

为什么文本字段保留逗号,但数字字段不保留?

当 MySQL 在数字上下文中遇到文本字符串时,它会将其强制转换为数字。草草了事。

因此,如果您在数字上下文中使用字符串 00134abc,则会得到数字 134。而且,在您的情况下,它看到 1,234 并将其强制为 1.

是的,我们都知道这是 xxx 颈部疼痛。

您可以使用类似这样的东西来完成您的负载(未调试!)

LOAD DATA LOCAL INFILE 'file_location.csv' 
INTO TABLE social_spend 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS
(col1, col2, @yourNumber, col4)
SET numberColumn = CAST(REPLACE(@yourNumber, ',', '') AS SIGNED INTEGER);

在括号之间,您可以列出 table 的列以对应于 CSV 中的列。如果您输入 @something,您可以在 SET 子句的表达式中使用它。我显示的表达式从您的数字中删除了逗号。