无法将带有空值的制表符分隔数据导入mysql表

无法将带有空值的制表符分隔数据导入mysql表,mysql,string,import,mariadb,missing-data,Mysql,String,Import,Mariadb,Missing Data,我有一个以制表符分隔的数据文件,其中有许多缺少的值,我需要将其导入到mariadb(10.4.5)中的表中 我使用了这个命令: load data infile 'c:/path to file/file.txt' into table table_name fields terminated by '\t' lines terminated by '\n' ignore 1 rows; 但我得到了这个错误: SQL错误(1366):第10行的列db\u name表\u name列\u nam

我有一个以制表符分隔的数据文件,其中有许多缺少的值,我需要将其导入到mariadb(10.4.5)中的表中

我使用了这个命令:

load data infile 'c:/path to file/file.txt' into table table_name fields terminated by '\t' lines terminated by '\n' ignore 1 rows;
但我得到了这个错误:

SQL错误(1366):第10行的列
db\u name
表\u name
列\u name 1
的双精度值不正确

当我检查文本数据文件时,第10行的col_name1是一个缺少的值-即两个制表符分隔符之间没有任何值

我花了几个小时试图解决这个问题——我希望得到任何帮助:是否有任何方法可以将缺少的值(空字符串)导入mysql表

在使用加载数据填充之前,是否需要预处理文本文件?如果是这样的话,预处理的最佳方式是什么

在使用加载数据填充之前,是否需要预处理文本文件?如果是这样的话,预处理的最佳方式是什么

您必须在导入过程中执行此操作。比如:

LOAD DATA INFILE 'c:/path to file/file.txt' 
INTO TABLE table_name 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS
-- the fields which values are set directly, 
-- and intermediate variables for values which must be processed,
-- positioned according to CSV structure
(field1, field2, @variable3, field4, ...)
-- process the values in the variables and set fields values
SET field3 = CASE WHEN @variable3 = '' THEN 0 ELSE @variable3 END;

(field1,field2,@variable3,field4,…)
是从源CSV文件的每一行解析的数据字段的目标

即,当前处理的源行的第一个解析值将直接分配给目标表的字段
field1
。第二个值和
字段2也一样

解析的第三个值将分配给用户定义的局部变量
@variable3

第四个解析值将再次分配给表字段。如果存在更多数据和代码,则以此类推

根据上面解释的规范解析整行后,执行下一个处理指令:
SET field3=CASE WHEN@variable3='',然后0 ELSE@variable3 END

这很简单。如果将变量
@variable3
的值分配给空字符串,则将值
0
分配给当前解析的记录的字段
field3
,否则,从源文件的当前行解析的值将分配给此字段,而无需修改

在两行处理后,整个记录(分配给某个值的所有字段)通过通用方式(将默认值分配给未列出的字段、检查、触发器…)存储到目标表中的一个新记录中


存储记录后,CSV的下一行将被读取、解析、处理、存储,然后是下一行。。。以此类推,直到文件结束或出现错误。

这是否回答了您的问题?我回顾了这一点——区别在于,在我的例子中,导入完全停止,而不是将空字符串替换为零。我觉得这个解决方案是相似的,如果不相同的话。谢谢你,阿基娜。我不熟悉这里的语法:我假设(field1,field2,variable3,field4,…)指的是所有字段名;什么是可变的3。“你能举例说明吗?”保罗补充了一些解释。这很有帮助!非常感谢您的详细解释。