10

我需要将一组具有一个字段作为 blob 的大数据导入 mysql 服务器(5.5)。按照 SELECT INTO OUTFILE 和 LOAD DATA INFILE 的示例,它[几乎] 工作正常。但是,我有一个问题:BLOB 文件中生成的数据实际上具有二进制表示。生成的文件如下所示(第 3 列代表 BLOB 文件):

1,1,"4Vÿ"
2,1,"ª»Ì"
3,1,"Ýîÿ"
4,1,"\"3"

在这种情况下,使用以下 sql 语句导入可以正常工作:

加载数据文件'C:/temp/mysql/mysqldump.1.txt'
进入表`test_table`
  以 ',' 结尾的字段可选地由 '"' 包围
  以“\r\n”结尾的行
;

我的问题是文本是这样偶然生成的。如果出现引号、换行符或其他什么,我需要手动进行转义(即用反斜杠字符替换它们),我想跳过这一步。

所以,我的问题是:有什么方法可以导入具有以下格式的文本文件(BLOB 存储为十六进制):

1, 1, 0x123456FF
2, 1, 0xaabbcc
3, 1, 0xddeeff
4, 1, 0x112233

用一个单一的mysql语句?

更新:忘了提及 - 尝试使用 LOAD DATA INFILE 语句直接导入具有所需格式的文本文件,结果实际上是将文本“0x123456FF”存储在表的 BLOB 文件中。

4

2 回答 2

28

您可以使用 LOAD DATA INFILE 的 SET 部分,并且不需要 0x 转义内容:

1, 1, 123456FF
2, 1, aabbcc
3, 1, ddeeff

然后将该列分配给一个变量,然后将该列设置为该变量的 UNHEXed 版本:

LOAD DATA INFILE 'file' INTO TABLE `table` (column1, column2, @var1)
SET column3 = UNHEX(@var1)
于 2013-02-21T12:52:02.713 回答
0

找不到任何替代方案。看起来唯一的方法是唯一的方法binary(另外,mysql 上已经有一个关于此的错误/功能请求)。

需要考虑两件事:

  • 生成输入文件时的文本文件编码;
  • 字符转义(NEW-LINE、TAB、QUOTE 等);
于 2012-08-23T08:41:35.573 回答