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