【问题标题】:Load data infile default value not inserting in table加载数据文件默认值不插入表中
【发布时间】:2012-06-05 12:26:05
【问题描述】:

我正在使用 LOAD DATAINFILE 导入 csv 文件

csv 列是名称、类型、状态

我的表结构是

名称:varchar 类型 : Varchar 状态:Tiny int 默认值 1

我使用这个 stmt :

LOAD DATA INFILE '/var/www/names.csv' 
INTO TABLE users FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 LINES 

当我使用上述语句时,它必须为每一行插入状态值 1,但插入的不是相同的。 请指教。

【问题讨论】:

  • 你的“行”真的以空格字符结尾吗?
  • 发布示例 CSV 数据。我怀疑你有 ' ' 行终止符而不是 '\n'
  • 对于错误插入的记录,CSV 在 STATUS 列中实际包含什么?
  • CSV 不包含状态列,但默认我想在插入过程中将状态设为 1。
  • 加载所有数据后,您可以执行更新操作以将表中的Status 列设置为相同的值。

标签: php mysql


【解决方案1】:

当加载一个文件时,MySQL 期望它具有与目标表相同的列数,除非您另外指定,即使缺少的列具有默认值。因此,为您的 LOAD 语句提供一个列列表,并为 STATUS 的值提供一个文字 1:

LOAD DATA INFILE '/var/www/names.csv' 
INTO TABLE users 
  FIELDS TERMINATED BY ',' 
  ENCLOSED BY '"' 
  LINES TERMINATED BY '\n' 
  IGNORE 1 LINES 
  (`name`, `type`, 1)

您也可以使用SET 子句来做到这一点:

LOAD DATA INFILE '/var/www/names.csv' 
INTO TABLE users 
  FIELDS TERMINATED BY ',' 
  ENCLOSED BY '"' 
  LINES TERMINATED BY '\n' 
  IGNORE 1 LINES 
  (`name`, `type`)
  SET `status` = 1

【讨论】:

    【解决方案2】:

    执行查询后,检查是否有任何警告使用

    show warnings
    

    数字数据类型的默认值为 0,字符串的默认值为 ''。

    所以你应该在创建表时设置默认值 1

    create table tableName
    (
    name nvarchar(100) not null,
    type nvarchar(100) not null,
    status smallint default 1
    );
    

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 2011-12-08
      • 2017-09-13
      • 1970-01-01
      • 2013-01-14
      • 2018-04-05
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      相关资源
      最近更新 更多