将CSV文件加载到MySQL数据库中时出现问题
CSV文件是这样的:
stuID,stuName,degreeProg
6902101,A001,null
6902102,A002,null
6902103,A003,null
6902104,A004,null
6902105,A005,null
我写了一个这样的脚本:
LOAD DATA LOCAL INFILE 'demo.csv' INTO TABLE `table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(`col1`, `col2`, `col3`)
让我感到困扰的是:
null
,但加载到表格后,它变为'null'
(字符串)null
我应该如何编写脚本来处理这两个问题? (禁止修改csv文件)(最好在运行此脚本时尝试减少MySQL的警告)
答案 0 :(得分:1)
1)一个选项是让LOAD DATA
分配第三个字段的值(即字符串'null') into a user defined variable, and use the
" SET col = expr" form to assign a value to the column
col3`
举个例子:
(`col1`, `col2`, @field3)
SET col3 = IF(@field3='null',NULL,@field3)
2)没有办法让MySQL LOAD DATA"跳过"文件中的最后一条记录。要让MySQL忽略最后一行,那么在MySQL之外可以更好地处理。例如,从命名管道读取MySQL LOAD DATA,并让一个单独的并发进程读取CSV文件并写入该命名管道。
答案 1 :(得分:0)
如果您可以修改CSV文件,只需添加FIELDS ENCLOSED BY '"'
并将null
更改为NULL
(大写),即可将其加载为NULL
。或者,使用\N
加载NULL
。
另外,显然,删除末尾的空行(最有可能导致警告):
stuID,stuName,degreeProg
6902101,A001,\N
6902102,A002,\N
6902103,A003,\N
6902104,A004,\N
6902105,A005,\N