MariaDB导入CSV

MariaDB导入CSV,mariadb,Mariadb,下午的人们 我正在尝试将CSV导入MariaDB上的表中 表上的列是 MariaDB [snipeit]> show columns from locations; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--

下午的人们

我正在尝试将CSV导入MariaDB上的表中

表上的列是

MariaDB [snipeit]> show columns from locations;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | text             | YES  |     | NULL    |                |
| city       | varchar(191)     | YES  |     | NULL    |                |
| state      | varchar(191)     | YES  |     | NULL    |                |
| country    | varchar(191)     | YES  |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
| user_id    | int(11)          | YES  |     | NULL    |                |
| address    | varchar(191)     | YES  |     | NULL    |                |
| address2   | varchar(191)     | YES  |     | NULL    |                |
| zip        | varchar(10)      | YES  |     | NULL    |                |
| deleted_at | timestamp        | YES  |     | NULL    |                |
| parent_id  | int(11)          | YES  |     | NULL    |                |
| currency   | varchar(10)      | YES  |     | NULL    |                |
| ldap_ou    | varchar(191)     | YES  |     | NULL    |                |
| manager_id | int(11)          | YES  |     | NULL    |                |
| image      | varchar(191)     | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+

CSV看起来像

id  name    city    state   country created_at  updated_at  user_id address address2    zip deleted_at  parent_id   currency    ldap_ou manager_id  image
testname NULL   NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL    NULL
id为空

但警告显示

MariaDB [snipeit]> show warnings;
+---------+------+------------------------------------------------------------------+
| Level   | Code | Message                                                          |
+---------+------+------------------------------------------------------------------+
| Warning | 1366 | Incorrect integer value: '' for column 'id' at row 1             |
| Warning | 1265 | Data truncated for column 'created_at' at row 1                  |
| Warning | 1265 | Data truncated for column 'updated_at' at row 1                  |
| Warning | 1366 | Incorrect integer value: 'NULL' for column 'user_id' at row 1    |
| Warning | 1265 | Data truncated for column 'deleted_at' at row 1                  |
| Warning | 1366 | Incorrect integer value: 'NULL' for column 'parent_id' at row 1  |
| Warning | 1366 | Incorrect integer value: 'NULL' for column 'manager_id' at row 1 
知道为什么会这样吗?我想如果一个字段有NULL,我可以在它上面使用NULL

我用来导入的命令是

 load data local infile '/media/Share1/CSV_Files/test.csv' into TABLE locations fields terminated by ',' ignore 1 lines;

干杯

因为
id
是一个
自动增量
字段,它是自动生成的。您需要从CSV文件中删除
id
列。

有很多错误:

  • csv指定17列,第二行(第一行数据)有16个值,这意味着“testname”用于匹配第一列ID 您应该删除“id”
  • 您的命令指示“字段以“,”结尾”,但字段之间不以“,”分隔。你应该用逗号把它们分开
  • csv文件中的列与您向我们显示的列与“显示来自位置的列”不匹配
  • 然后再次尝试加载您的文件,并告诉我们是否存在其他错误

    您可能想做的是:

    name,city,state,country,created_at,updated_at,user_id,address,address2,zip,deleted_at,parent_id,currency,ldap_ou, manager_id,image;
    testname,,,,,,,,,,,,,,,;
    
    并使用以下命令:

    load data local infile '/media/Share1/CSV_Files/test.csv' into TABLE locations fields terminated by ',' LINE TERMINATED BY ";" ignore 1 lines;
    
    load data local infile '/media/Share1/CSV_Files/test.csv' 
    into table locations
    fields terminated by ',' 
    line terminated by ";" 
    ignore 1 lines
    (name,city,state,country,created_at,updated_at,user_id,address,address2,zip,deleted_at,parent_id,currency,ldap_ou,manager_id,image)
    set id = null;
    
    编辑: 您的命令应该指定出现在csv文件中的列,如下所示(顺序正确!!):

    编辑2:

    使用加载数据读取数据时,空列或缺少的列将更新为“”。若要将空值加载到列中,请在数据文件中使用\N。在某些情况下,也可以使用文字NULL。见第13.2.7节“加载数据语法”

    因此,您的csv应该如下所示:

    name,city,state,country,created_at,updated_at,user_id,address,address2,zip,deleted_at,parent_id,currency,ldap_ou, manager_id,image;
    testname,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N;
    
    编辑3:它可能是最终的解决方案。不要在csv文件中指定id字段,就像上面的“编辑2”中那样。并使用以下命令:

    load data local infile '/media/Share1/CSV_Files/test.csv' into TABLE locations fields terminated by ',' LINE TERMINATED BY ";" ignore 1 lines;
    
    load data local infile '/media/Share1/CSV_Files/test.csv' 
    into table locations
    fields terminated by ',' 
    line terminated by ";" 
    ignore 1 lines
    (name,city,state,country,created_at,updated_at,user_id,address,address2,zip,deleted_at,parent_id,currency,ldap_ou,manager_id,image)
    set id = null;
    

    您计划如何映射CSV文件中的列
    manager\u id
    等,这些列在现有表格中似乎没有对应项?抱歉,更新了OP,显示了错误的表格您下面有两个答案,它们似乎在正确的轨道上。它不是CSV文件,而是TSV文件(C代表逗号,T代表制表),所以,如果您想在未来数据加载查询中正确处理分隔符,就必须相应地设置分隔符。当然,还有很多其他的事情是去年以来整理出来的。没关系,我已经用一些其他的建议编辑了我的答案,如果之后一切正常,请毫不犹豫地接受我的答案。谢谢你,快点。感谢您在空字段中输入\N,我不希望工作正常。但是如果我删除id字段,所有字段都将为空。。无论如何,输入id字段但保持为空似乎很好。适用于我的命令是“将数据本地填充加载到以”“忽略1行”“结尾的表位置字段中;”media/Share1/CSV_Files/test.CSV;“`”当我使用你的(名字,城市,等等)时,它会抱怨语法不正确。我现在唯一的警告是第1行“id”列的“warning”1366“error integer value:”``要修复第1行“id”列的“warning”1366“error integer value:”,您应该尝试使用\N而不是将其保留为空