【问题标题】:Import hex/binary data into mysql将十六进制/二进制数据导入mysql
【发布时间】:2012-08-20 13:39:28
【问题描述】:

我需要将一组具有一个字段作为 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 语句直接导入所需格式的文本文件,结果实际上是在 BLOB 文件中存储了文本“0x123456FF”表。

【问题讨论】:

    标签: mysql import blob


    【解决方案1】:

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

    【讨论】:

    • 太酷了!不知道可以将变量分配为负载数据的一部分。
    【解决方案2】:

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

    需要考虑的两件事:

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

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2014-10-30
      • 2012-04-08
      • 2012-06-26
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      相关资源
      最近更新 更多