Bur*_*Dor 19 mysql database blob mysql-loadfile
我在mySQL中有一个表,它有一个名为"image"的字段,数据类型为"BLOB".我想知道是否可以直接从命令行客户端上传该字段中的图像,而不是通过php进行...如果有可能,那么我应该在哪里放置我的图像文件?
Bil*_*win 26
尝试使用LOAD_FILE()函数.
UPDATE `certain_table`
SET image = LOAD_FILE('/full/path/to/new/image.jpg')
WHERE id = 1234;
Run Code Online (Sandbox Code Playgroud)
有关文件名,权限等路径的要求,请参阅手册.
LOAD_FILE仅适用于某些特权且文件位于服务器上.我发现了一种让它完全在客户端工作的方法:
mysql -e "update mytable set image=FROM_BASE64('`base64 -i image.png`')" DBNAME
Run Code Online (Sandbox Code Playgroud)
我的想法是动态地将图像编码为base64,然后让MySql对其进行解码.
这是Teudimundo的答案的一种变体,该答案适用于无法使用Base64函数的旧MySQL版本:
mysql -e "update mytable set col = x'$(xxd -p image.png | tr -d \\n)' where ..."
Run Code Online (Sandbox Code Playgroud)
诀窍是使用xxd -p将二进制文件转换为普通的十六进制转储:
$ xxd -p /usr/share/font-manager/data/blank.png
89504e470d0a1a0a0000000d4948445200000040000000400806000000aa
6971de000000274944415478daedc1010d000000c220fba77e0e37600000
00000000000000000000000000c0bd0040400001ee1dbb2f000000004945
4e44ae426082
Run Code Online (Sandbox Code Playgroud)
然后使用tr -d \\n来删除换行符,最后将结果嵌入到特定于MySQL的hexdump字符串文字中:x'...'