无法将带有空值的制表符分隔数据导入mysql表
我有一个以制表符分隔的数据文件,其中有许多缺少的值,我需要将其导入到mariadb(10.4.5)中的表中 我使用了这个命令:无法将带有空值的制表符分隔数据导入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
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。“你能举例说明吗?”保罗补充了一些解释。这很有帮助!非常感谢您的详细解释。