【问题标题】:Sqlite: How to cast(data as TEXT) for BLOBSqlite:如何为 BLOB 转换(数据为 TEXT)
【发布时间】:2013-01-04 07:07:55
【问题描述】:

我有一个 sqlite 数据库,我想从中提取一列数据类型为 BLOB 的信息。我正在尝试这个:

SELECT cast(data as TEXT) FROM content

这显然行不通。输出是这样的乱码:

x��Uak�0�>�8�0Ff;I�.��.i׮%�A��s�M

内容列中的数据主要是文本,但也可能包含图像(我认为如果我转换为 TEXT 可能会导致问题)。我只是想将这些数据提取成可用的格式。有什么想法吗?

【问题讨论】:

    标签: sqlite casting


    【解决方案1】:

    你可以使用

    SELECT hex(data) FROM content
    

    SELECT quote(data) FROM content
    

    第一个将返回一个十六进制字符串 (ABCD),第二个引用为 SQL 文字 (X'ABCD')。

    请注意,(目前)没有办法将十六进制列信息转换回 SQLite 中的 BLOB。您必须使用 C/Perl/Python/... 绑定来转换和导入它们。

    【讨论】:

      【解决方案2】:

      您可以编写一些简单的脚本,将数据库中的所有 blob 保存到文件中。稍后,您可以查看这些文件并决定如何处理它们。

      例如,这个 Perl 脚本将在当前目录中创建大量文件,这些文件将包含您的数据 blob 字段。只需调整 SELECT 语句以根据需要限制获取的行数:

      use DBI;
      
      my $dbh = DBI->connect("dbi:SQLite:mysqlite.db")
          or die DBI::errstr();
      my $sth = $dbh->prepare(qq{
          SELECT id, data FROM content
      });
      $sth->execute();
      while (my $row = $sth->fetchrow_hashref()) {
          # Create file with name of $row->{id}:
          open FILE, ">", "$row->{id}";
          # Save blob data into this file:
          print FILE $row->{data};
          close FILE;
      }
      $dbh->disconnect();
      

      【讨论】:

        猜你喜欢
        • 2014-12-20
        • 2022-10-16
        • 2011-09-05
        • 2010-10-31
        • 1970-01-01
        • 2022-01-25
        • 2020-10-21
        • 1970-01-01
        • 2017-04-02
        相关资源
        最近更新 更多