Here is one way to do it. The test.jpg
file test.jpg
inserted into the foo
table of the foodb
database after hexdump
ed in the binary literal of the sqlite format:
[ someone@somewhere tmp]$ sqlite3 foodb "create table foo (bar blob);" [ someone@somewhere tmp]$ echo "insert into foo values (X'`hexdump -ve '1/1 "%.2x"' test.jpg`');" | sqlite3 foodb
EDIT
And here we see that the data is stored in "full accuracy", since the .jpg file can be restored:
[ somneone@somewhere tmp]$ sqlite3 foodb "select quote(bar) from foo;" | perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie' > bla.jpg [ somneone@somewhere tmp]$ ll *.jpg -rw-rw-r-- 1 someone someone 618441 Apr 28 16:59 bla.jpg -rw-rw-r-- 1 someone someone 618441 Apr 28 16:37 test.jpg [ someone@somewhere tmp]$ md5sum *.jpg 3237a2b76050f2780c592455b3414813 bla.jpg 3237a2b76050f2780c592455b3414813 test.jpg
In addition, this approach is spatially efficient because it stores .jpg using the sqlite BLOB type. It does not build an image using, for example, base64 encoding.
[ someone@somewhere tmp]$ ll foodb -rw-r--r-- 1 someone someone 622592 Apr 28 16:37 foodb
user610650
source share