我有一个名为“crea”的数据库,其中包含一个名为“assets”的表,在此表中我有11列命名(name,description,assetType,local,temporary,data,id,create_time,access_time,asset_flags,CreatorID)
我还有一个包含许多.jp2格式图片的目录文件夹(xxxx.jp2)
我想要做的是将这些图片批量插入我的数据库的“资产”表中,所以我决定使用2个shell脚本,两者都在带有图片的目录中。
当我从终端启动./assetadd.sh时,我从MySQL收到此错误:
ERROR 1048 (23000) at line 1: Column 'data' cannot be null
我查了很多次,确定列'数据'不是NULL(类型:LONGBLOB Binaries Null:NO),所以我真的不明白为什么我会收到这个错误。
帮助将被贬低。谢谢
- 脚本1:assetsadd.sh
#!/bin/bash
path=$(pwd)
find $path/ -type f \( -iname *.jp2 \) -exec ./insertjp2.sh {} \;
echo "finished!!"
- 脚本2:insertjp2.sh
#!/bin/bash
user="crea"
password="crea"
database="crea"
dbhost="localhost"
creator="crea"
param=$@
basenam=${param##*/}
filenam=${basenam%.*}
MYSQL=`/usr/bin/mysql -u$user -p$password -D$database -e"INSERT INTO assets (name,description,assetType,local,temporary,data,id,create_time,access_time,asset_flags,CreatorID) VALUES ('$filenam','$filenam',0,0,0,LOAD_FILE('$param'),'$filenam',UNIX_TIMESTAMP(),1325304546,0,'$creator' );"`
echo $param >> assetadd.log
echo $MYSQL
答案 0 :(得分:1)
来自documentation for LOAD_FILE:
读取文件并以字符串形式返回文件内容。要使用此功能,文件必须位于服务器主机上,您必须指定文件的完整路径名,并且您必须具有FILE权限。该文件必须可由所有人读取,其大小必须小于max_allowed_packet字节。如果secure_file_priv系统变量设置为非空目录名,则要加载的文件必须位于该目录中。
如果由于不满足上述条件之一而导致文件不存在或无法读取,则该函数返回NULL。
看起来至少,你没有指定文件名的完整路径。