第1行的错误1048(23000):列不能为空

时间:2012-01-09 18:08:03

标签: mysql bash

我有一个名为“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

1 个答案:

答案 0 :(得分:1)

来自documentation for LOAD_FILE

  

读取文件并以字符串形式返回文件内容。要使用此功能,文件必须位于服务器主机上,您必须指定文件的完整路径名,并且您必须具有FILE权限。该文件必须可由所有人读取,其大小必须小于max_allowed_pa​​cket字节。如果secure_file_priv系统变量设置为非空目录名,则要加载的文件必须位于该目录中。

     

如果由于不满足上述条件之一而导致文件不存在或无法读取,则该函数返回NULL。

看起来至少,你没有指定文件名的完整路径。