将十六进制/二进制数据导入mysql

时间:2012-08-20 13:39:28

标签: mysql import blob

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

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

并且使用以下sql语句导入适用于此情况:

LOAD DATA INFILE 'C:/temp/mysql/mysqldump.1.txt'
INTO TABLE `test_table`
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\r\n'
;

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

所以,我的问题是:有没有办法可以导入一个文本文件,格式如下(BLOB存储为hexa):

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

使用一个单独的mysql语句?

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

2 个答案:

答案 0 :(得分:20)

您可以使用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)

答案 1 :(得分:0)

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

需要考虑两件事:

  • 生成输入文件时的文本文件编码;
  • 字符转义(NEW-LINE,TAB,QUOTE等);