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

将十六进制/二进制数据导入mysql,mysql,import,blob,Mysql,Import,Blob,我需要将一组大数据导入mysql服务器(5.5),其中一个字段作为blob。在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/mysq

我需要将一组大数据导入mysql服务器(5.5),其中一个字段作为blob。在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' ; 加载数据填充'C:/temp/mysql/mysqldump.1.txt' 进入表'test_表` 字段以“,”结尾,也可以用“,”括起 以“\r\n”结尾的行 ; 我的问题是,文本是这样偶然生成的。如果出现引号、新行或其他情况,我需要手动进行转义(即用反斜杠字符替换它们),我想跳过这一步

因此,我的问题是:是否有任何方法可以导入以下格式的文本文件(BLOB存储为hexa):

1,1,0x123456FF 2,1,0xaabbcc 3,1,0xddeeff 4,1,0x112233 用一个mysql语句


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

找不到任何替代方法。看起来唯一的方法是二进制的(同样,mysql上已经有一个关于这个的bug/feature请求)

需要考虑两件事:

  • 生成输入文件时的文本文件编码
  • 字符转义(换行、制表符、引号等)
您可以使用加载数据填充的设置部分,而不需要0x转义:

1, 1, 123456FF
2, 1, aabbcc
3, 1, ddeeff
然后将该列指定给变量,然后将该列设置为该变量的未执行版本:

LOAD DATA INFILE 'file' INTO TABLE `table` (column1, column2, @var1)
SET column3 = UNHEX(@var1)

太酷了!不知道可以将变量指定为负载数据的一部分。
1, 1, 123456FF
2, 1, aabbcc
3, 1, ddeeff
LOAD DATA INFILE 'file' INTO TABLE `table` (column1, column2, @var1)
SET column3 = UNHEX(@var1)