簡體   English   中英

Perl DBI / FreeTDS / SQL-Server:如何插入/更新 BLOB varbinary(max) 數據?

[英]Perl DBI / FreeTDS / SQL-Server: How to insert/update BLOB varbinary(max) data?

我正在嘗試通過 Linux 中的 DBI 和 freeTDS 將二進制數據插入到 Microsoft SQL-Server 2014 上的 VARBINARY(max) 列中。

以下(簡化)代碼不起作用:

$data = "foobar"; # real binary data gives same error
$dbh = <...valid db-handle ...>;
$sth = $dbh->prepare ("UPDATE table SET data=? WHERE id=?");
$sth->bind_param (1,$data,DBI::SQL_VARBINARY);
$sth->bind_param (2,$some_id);
$sth->execute or die ...

結果是:

ct_result(ct_dynamic(CS_PREPARE)) returned -205 at /usr/lib/x86_64-linux-gnu/perl5/5.28/DBD/Sybase.pm line 138.
DBD::Sybase::db prepare failed: Server message number=257 severity=16 state=3 line=1 server=SERVER text=Implicit conversion from data type varchar to varbinary(max) is not allowed. Use the CONVERT function to run this query. Server message number=8180 severity=16 state=1 line=1 server=...
Can't call method "bind_param" on an undefined value 

似乎 bind_param 調用尾部正確編碼二進制數據。 未定義值錯誤似乎是綁定執行失敗的結果。 我為 bind_param 嘗試了各種其他列類型,如 SQL_LONGVARBINARY、SQL_BLOB ...但錯誤保持不變。

https://metacpan.org/pod/distribution/DBD-Sybase/dbd-sybase.pod#String-Data-Handling

DBD::Sybase 支持 CHAR/VARCHAR/BINARY/VARBINARY,長度限制為 255 個字符,直到版本 12.0x。 從 12.5 開始,這些數據類型的大小最多可達 16K - 但支持更大的大小需要使用 Open Client 12.5 或更高版本。

Sybase 不區分 CHAR 和 VARCHAR 或 BINARY 和 VARBINARY

似乎DBD::Sybase忽略了DBI::SQL_VARBINARY提示並將數據作為varchar發送。

嘗試:

UPDATE table SET data=CONVERT(VARBINARY(max), ?, 1) WHERE id=?

還要檢查syb_use_bin_0x設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM