我正在创建一个小脚本来导入SQLite数据库中的大图像目录, 我完全清楚SQLite不是存储大blob的最佳位置,但这就是我必须要做的事情。
实际上,我正在尝试使用hexdump:
sqlite3 name.db "INSERT INTO table (image) values(x'"$(hexdump -v -e '1/1 "%02x"' ./filename.jpg)"');"
但偶尔,在相当大的图像上,它会返回错误:
sqlite3: Argument list too long
你将如何解决这个问题?
答案 0 :(得分:4)
当SQL命令作为参数提供给sqlite3
时,必须在生成之前生成hexdump
的整个输出。可以实际使用该参数。
管道没有尺寸限制:
(echo -n "INSERT INTO table (image) values(x'"
hexdump -v -e '1/1 "%02x"' ./filename.jpg
echo "');") | sqlite3 name.db
或者,您可以将命令写入文件,并将sqlite3
告诉.read
。
3.8.6或更高版本中的SQLite shell具有readfile() function来直接读取文件。