You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MySQL命令行存储图片?bash脚本报错求助

解决bash脚本通过MySQL CLI存储图片到数据库的问题

问题根源

二进制图片数据中包含的特殊字符(如反斜杠、引号、控制字符)会直接破坏SQL语句的语法结构,导致MySQL解析时出现类似Unknown command '\l'的错误。直接将图片内容读入bash变量再拼接进SQL的方式无法处理这些特殊字符的转义。

解决方案

  1. 改用MySQL的LOAD_FILE()函数:让MySQL直接读取临时生成的缩略图文件,避免将二进制数据传入bash变量,从根源上解决转义问题。
  2. 修复SQL语法错误:原SQL中Thumb字段行末尾遗漏了逗号,这也是潜在的语法问题。

修改后的脚本片段

…
# Store a thumbnail of the image file, together with path and image name.

tmp="/tmp/$1"
/usr/local/bin/magick \
    "$1" \
    -thumbnail 256x256 \
    -unsharp 1.5x1+0.7+0.02 \
    "${tmp}"

fullpath=$(realpath "$1")
dirpath=$(dirname "${fullpath}")
basename=$(basename "${fullpath}")

# 调整SQL语句,用LOAD_FILE读取临时文件,同时修复逗号缺失问题
sql="INSERT INTO Bird_Images SET \
    \`Master_Guide\` = \"${handle}\", \
    \`Thumb\` = LOAD_FILE('${tmp}'), \
    \`Path\` = \"${dirpath}\", \
    \`Filename\` = \"${basename}\""

echo $fullpath
echo $dirpath
echo $basename
#echo $sql

/usr/local/bin/mysql \
    --user=GPS_User \
    --password=ReSu_SpG \
    --host=localhost \
    --database=Personal \
    --execute="${sql}"

额外注意事项

  • 确认MySQL的secure_file_priv系统变量允许读取/tmp目录:执行SHOW VARIABLES LIKE 'secure_file_priv';查询,若值为/tmp或空则符合要求;若为指定目录,需将临时缩略图文件放到该目录下。
  • 临时文件${tmp}的权限需确保MySQL进程可读取,/tmp目录默认权限为777,一般无需额外设置。
  • 建议用$()替代反引号执行命令,bash中该写法更易读,嵌套场景下更稳定。

内容的提问来源于stack exchange,提问作者Jan Steinman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:07:22