使用Perl脚本将BLOB插入MS SQL数据库
请原谅我对Perl的无知,因为我是一名.NET开发人员(我已经听到你们所有人的唾沫和诅咒;) 我们需要使用Perl脚本将BLOB(+一些其他数据)插入MS-SQL数据库(我们的后端系统在AIX上运行,使用Perl脚本处理日常事务) 我们的Perl家伙似乎遇到了一个问题:他可以插入MS-SQL服务器(我们讨厌的.NETers使用)的最大BLOB是64k,但我们需要Perl脚本来插入2MB-6MB的BLOB 如果可以插入超过64k的斑点;有谁能建议我们的Perl人员可以通过什么途径进行调查以实现这一点 很抱歉“通过代理”提问,但我们的Perl专家正在度假 提前感谢,使用Perl脚本将BLOB插入MS SQL数据库,sql,perl,blob,Sql,Perl,Blob,请原谅我对Perl的无知,因为我是一名.NET开发人员(我已经听到你们所有人的唾沫和诅咒;) 我们需要使用Perl脚本将BLOB(+一些其他数据)插入MS-SQL数据库(我们的后端系统在AIX上运行,使用Perl脚本处理日常事务) 我们的Perl家伙似乎遇到了一个问题:他可以插入MS-SQL服务器(我们讨厌的.NETers使用)的最大BLOB是64k,但我们需要Perl脚本来插入2MB-6MB的BLOB 如果可以插入超过64k的斑点;有谁能建议我们的Perl人员可以通过什么途径进行调查以实现这一
JD如果这是
DBI
,您可以将数据库句柄的最大缓冲区设置为所需的限制:
$dbh->{LongReadLen} = 10485760; # 10 MB
从
DBI
FAQ:
如何使用DBI处理BLOB数据?
使用DBI处理BLOB数据非常困难
非常直截了当。水滴柱
在SELECT语句中指定为
每个普通列。但是你也
需要指定最大BLOB大小
数据库句柄可以
使用LongReadLen属性获取
例如:
### $dbh is a connected database handle
$sth = $dbh->prepare( "SELECT blob_column FROM blobby_table" );
$sth->execute; would fail.
### $dbh is a connected database handle
### Set the maximum BLOB size...
$dbh->{LongReadLen} = 16384; ### 16Kb...Not much of a BLOB!
$sth = $dbh->prepare( "..." );
如果没有专栏,他会成功
值大于指定的值
价值观
如果BLOB数据长于
LongReadLen的值,然后是一个错误
将会发生。然而,DBI提供了
另一项功能
这将自动截断
已获取大小为的BLOB
如果更长,则为LongReadLen。确实如此
不会导致错误发生,但可能
使获取的BLOB数据无效
这种行为受法律的管制
LongTruncOk属性是
默认设置为假值(因此
使过长的BLOB获取失败)
BLOB数据的截断可能不是一个简单的过程
如果一个水滴
包含运行长度编码数据,但
末尾包含校验和的数据,
例如,一个ZIP文件
变得无用
要插入BLOB,通常需要使用占位符。使用占位符准备语句,然后按如下方式绑定要插入的值: $statement->bind_参数(?,$myvalue,DBI::SQL_BLOB) 哪里??是占位符的位置,从1开始。然后像往常一样执行语句,例如: $statement->execute()
和往常一样,错误处理是一个很好的计划。我们在SQLite中经常使用这种方法,但我很确定这对于MSSQL和MySQL也是正确的 哪个Perl模块被用来插入blob?我认为它是DBX(虽然,不是Perl开发人员,我可能是错的),我很遗憾我是一个.net的家伙谢谢,我是扎伊德。相同的过程(LongReadLen的设置)是否也会影响插入的BLOB的插入大小?@jdoig:Good point
LongReadLen
不会影响插入。只有选择。引用文档:…INSERT语句的最大大小通常有限制,quote方法通常无法处理二进制数据。
如果可能,最好是手动更改数据库设置。感谢Zaid,DB可以在我们从.NET代码读写BLOB时处理BLOB。问题可能在于连接方法(我不知道DBIAPI)或脚本中的一些错误。@jdoig:看看是否可以通过DB设置增加INSERT
缓冲区的大小。
### Set BLOB handling such that it's 16Kb and can be truncated
$dbh->{LongReadLen} = 16384;
$dbh->{LongTruncOk} = 1;