【问题标题】:LOAD Data text fields vs numeric comma interactionsLOAD 数据文本字段与数字逗号交互
【发布时间】:2026-01-16 11:40:02
【问题描述】:

我正在使用以下内容将 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 number-formatting bulk-load


    【解决方案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);
    

    您可以在括号之间列出表格中的列以对应 CSV 中的列。如果您输入@something,您可以在 SET 子句的表达式中使用它。我展示的表达式去掉了你数字中的逗号。

    【讨论】:

      最近更新 更多