mysqlimport和双引号

时间:2009-05-19 20:45:39

标签: mysql mysqlimport

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

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

他用值中的引号记录得非常严重。有没有办法我们可以告诉mysqlimport某些字段可选地用引号括起来,但是仍然可以包含引号?我们认为可能是全局搜索和替换以逃避字段值中的双引号?还是其他任何建议?

2 个答案:

答案 0 :(得分:1)

您可以使用引号(字段 - 可选 - 封闭 - 删除开关)导入它,然后运行检查,如果该值在开头和结尾都有双引号(假设这些值在开头没有英寸)然后从开头和结尾截断1个字符,以删除从导入中获得的额外引号。

编辑:在阅读了kekoav的回复后,我必须同意,如果你能够在导入之前操作文件,这将是一个更明智的选择,但如果你之后被迫删除引号,你可以使用这样的东西:< / p>
UPDATE table 
SET column = 
IF(
STRCMP(LEFT(table.column,1),'"'),
MID(table.column,2,(LENGTH(table.column)-2)),
table.column
)

表格中的每个“列”

答案 1 :(得分:1)

如果您的数据在字段引文的正文中包含引号而没有以某种方式划分,则表示您遇到问题。你不能保证mysqlimport会正确地做到这一点。

在尝试以这种方式插入数据之前先按下数据。

幸运的是,它是制表符分隔的,所以你可以运行一个正则表达式来用分隔版本替换引号,然后告诉mysqlimport分隔符。