2013-01-21 16 views
9

Ho un database SQLite dal quale voglio estrarre una colonna di informazioni con il tipo di dati BLOB. Sto cercando in questo modo:Sqlite: come eseguire il cast (dati come TEXT) per BLOB

SELECT cast(data as TEXT) FROM content

Questo non è, ovviamente, funziona. L'uscita è incomprensibile testo come questo:

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

I dati nella colonna contenuto è principalmente testo, ma può anche avere immagini (che ho riconosciuto potrebbe causare un problema se lancio come TEXT). Voglio semplicemente estrarre quei dati in un formato utilizzabile. Qualche idea?

risposta

0

È possibile scrivere un semplice script che salverà tutti i BLOB dal database in file. Più tardi, puoi dare un'occhiata a questi file e decidere cosa fare con loro.

Ad esempio, questo script Perl creerà molti file nella directory corrente che conterranno i campi del blob di dati. È sufficiente regolare istruzione SELECT per limitare le righe recuperati di cui hai bisogno:

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(); 
20

È possibile utilizzare

SELECT hex(data) FROM content 

o

SELECT quote(data) FROM content 

La prima restituisce una stringa esadecimale (ABCD), la seconda quotato come letterale SQL (X'ABCD').

Si noti che non esiste (al momento) alcun modo di convertire le informazioni esadecimali della colonna in un BLOB in SQLite. Dovrai usare i collegamenti C/Perl/Python/... per convertirli e importarli.

+0

Grazie Scruss, mi aiuta nei test di sicurezza :) –

Problemi correlati