我有一个sqlite数据库,我想从中提取数据类型为BLOB的信息列。我正在尝试这个:
SELECT cast(data as TEXT) FROM content
这显然不起作用。输出是乱码文本,如下所示:
x��Uak�0�>�8�0Ff;I�.��.i%�A��s�M
内容列中的数据主要是文本,但也可能包含图像(如果我将其转换为TEXT,我认为这可能会导致问题)。我只想将该数据提取为可用格式。有什么想法吗?
答案 0 :(得分:26)
您可以使用
SELECT hex(data) FROM content
或
SELECT quote(data) FROM content
第一个将返回十六进制字符串(ABCD
),第二个将引用为SQL文字(X'ABCD'
)。
请注意,(当前)无法将十六进制列信息转换回SQLite中的BLOB。您必须使用C / Perl / Python / ...绑定来转换和导入它们。
答案 1 :(得分:1)
您可以编写一些简单的脚本,将数据库中的所有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();