私はperlスクリプトを使用してデータベースからURLをプルしています。ここでは、fetchrow_arrayを使用してデータベースからURLをプルします。これは、非常に長いURLに遭遇するまで正常に機能し、georgelog24.blog.iskreni.net/?bid=6744d9dcf85991ed2e4b8a258153a1ab&lid=ff9963b9a798ea335b75b5f7c0c295d1
その後、このエラーが発生し始めました。
DBD::ODBC::st fetchrow_array failed: st_fetch/SQLFetch (long truncated DBI attribute LongTruncOk not set and/or LongReadLen too small) (SQL-HY000) [state was HY000 now 01004]
[Microsoft][ODBC SQL Server Driver]String data, right truncation (SQL-01004) at C:\test\multihashtest2.pl line 44.
私がURLをプルするために使用していたコードは以前に機能していたので、これはデータベース側にあると思います。私が使用しているデータベースはMSSQLServer2005です。
データベースのURL列は現在テキストタイプを使用していますが、 varchar(max)とnvarchar(max )に変更しようとしましたが、エラーが発生します。
少し試行錯誤した結果、URLの最大長がfetchrow_arrayで正常にクエリできることが81文字であることがわかりました。また、URLはばかげた長さにまたがることがあるため、URLの長さに制限を設けることはできません。
誰かが私がこれを理解して修正を提案するのを手伝ってもらえますか?
参考:44行目は以下のコードの最初の行です
while (($myid,$url) = $statement_handle->fetchrow_array()) { # executes as many threads as there are jobs to do
my $thread = threads->create(\&webcrawl); #initiate thread
my $tid = $thread->tid;
print " - Thread $tid started\n"; #obtain thread no. and print
push (@Threads, $thread); #push thread into array for "housekeeping" later on
}