1

我们有一个大的制表符分隔的文本文件(大约 120,000 条记录,50MB),我们正在尝试使用 mysqlimport 将其推入 MySQL。有些字段用双引号括起来,有些则没有。我们正在使用fields-optionally-enclosed-by='\"'开关,但问题是某些字段值本身包含双引号(表示英寸),因此分隔的字段值可能是“ABCDEF19”。有意义吗?

我们无法控制文件的来源,因此我们无法更改那里的格式。我尝试删除fields-optionally-enclosed-by开关,但随后导入了围绕值的双引号。

他在值中带有引号的记录变得严重混乱。有没有办法告诉 mysqlimport 某些字段可选用引号括起来,但仍可能包含引号?我们认为也许是全局搜索和替换来逃避字段值中的双引号?或者有什么其他建议?

4

2 回答 2

1

您可以使用引号导入它(fields-optional-enclosed-by 开关已删除),然后运行检查值是否在开头和结尾有双引号(假设所有值的开头都没有英寸)然后截断开头和结尾的 1 个字符以删除您从导入中获得的额外引号。

编辑:阅读kekoav的回复后,我必须同意,如果您能够在导入之前操作文件,那将是一个更明智的选择,但如果您之后被迫删除引号,您可以使用这样的东西:

UPDATE table 
SET column = 
IF(
STRCMP(LEFT(table.column,1),'"'),
MID(table.column,2,(LENGTH(table.column)-2)),
table.column
)

对于“表”中的每个“列”

于 2009-05-19T21:08:56.407 回答
1

如果您的数据在字段引用正文中包含引号而没有以某种方式分隔,那么您就有问题了。您不能保证 mysqlimport 会正确执行此操作。

在尝试以这种方式插入数据之前先对数据进行按摩。

幸运的是,它是制表符分隔的,因此您可以运行正则表达式以用分隔版本替换引号,然后告诉 mysqlimport 分隔符。

于 2009-05-19T21:09:56.890 回答