【问题标题】:Default value for empty integer fields when importing CSV data in MySQL在 MySQL 中导入 CSV 数据时空整数字段的默认值
【发布时间】:2011-07-20 15:16:11
【问题描述】:

我正在使用LOAD DATA INFILE 将 CSV 导入 MySQL 表。表的其中一个字段存储邮政编码数据,我在表结构contributor_zipcode INT 中定义了这些数据。

在 CSV 中,此字段有时为空。当我执行LOAD 查询时,MySQL 会抛出如下警告:

Incorrect integer value: '' for column 'contributor_zipcode' at row 180

我尝试将字段重新定义为contributor_zipcode INT DEFAULT '0',这会产生相同的警告,而contributor_zipcode INT DEFAULT NULL,MySQL 不允许这样做。有什么建议吗?

【问题讨论】:

  • 你能从你的 CSV 文件中发布一个虚拟行吗?
  • 2004,urn:fec:transaction,indiv:2004:1902928,15,24020610238,f,1000.00,2004-06-15,"FELDSTEIN, MARTIN",h30013132661,I,HARVARD UNIVERSITY,,M,,BELMONT,MA,02478,H5100,Harvard University,,,,Lisa Murkowski (R),N00026050,R,P,AK,AK,,Lisa Murkowski - US Senate,C00384529,R,f,,,federal:senate,federal:senate,I,W

标签: mysql sql csv


【解决方案1】:

空值被解释为空字符串 (''),而不是 NULL,因此未使用默认值。

如果要显式控制对这些空字符串的处理,最好将它们加载到用户变量中,然后使用用户变量有条件地设置列。

您可以使用它来将值设置为您想要的任何值(NULL、0 等)。

这是一个示例,假设您要将其设置为 0:

LOAD DATA INFILE '...'
INTO TABLE your_table
FIELDS TERMINATED BY ','
(column_one,..., @contributor_zipcode,..., column_n)
SET contributor_zipcode = IF(@contributor_zipcode='',0,@contributor_zipcode);

【讨论】:

  • 谢谢,这真的很有帮助。后续跟进:MySQL 是否允许我将 INT 字段的值设置为 NULL?还是您建议只使用 0?
  • 是的,您可以将 INT 设置为 NULL,这可能是您在这种情况下想要做的。您只需要确保将列定义为允许 NULL。
【解决方案2】:

在 Csv 中,我在运行脚本之前将所有“”替换为“\N”,这会在 db 中创建一个空字段

【讨论】:

    【解决方案3】:

    对于某些元素(例如邮政编码),默认值为null 可能更好,而不是0

    假设您有一张名为(还有什么)People 的人员表。

    create table People (
        id int,
        first_name varchar(30),
        last_name varchar(50),
        city varchar(50),
        state varchar(50),
        zip int
    );
    

    接下来,将您的 file.csv 加载到 People 表中。 注意最后一行(以set 开头),如果文件中的值为""(又名空字符串),则zip 被分配null

    load data local infile '/path/to/file.csv'
    into table People
    fields 
        terminated by ','
        enclosed by '"'
    lines terminated by '\n'
    (id, first_name, last_name, city, state, @zip)
    set zip = if(@zip='', null, @zip);
    

    【讨论】:

      猜你喜欢
      • 2015-10-19
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 2023-03-23
      相关资源
      最近更新 更多