スポンサーリンク

PerlのDBI/DBD::ODBCで 「String data, right truncated (SQL-01004)」 エラー

PerlでDBI(DBD::ODBC)経由でデータベースにアクセスしたところ、検索結果をフェッチするところで

DBD::ODBC::st fetchrow_array failed: [MySQL][ODBC 3.51 Driver][mysqld-3.23.49]String data, right truncated (SQL-01004)(DBD: st_fetch/SQLFetch (long truncated DBI attribute LongTruncOk not set and/or LongReadLen too small) err=-1) at C:\test\test.pl line 24.

というエラーが出て止まってしまいました。

メッセージによると、LongTruncOk が設定されていないか LongReadLen が小さすぎたかのどちらか(もしくは両方)とのことなので、対処法を調べてみました。

まずは LongTruncOk と LongReadLen とは何ぞや? というところなんですが、これ、DBIデータベースハンドルオブジェクトのプロパティなんですね。

ですので、以下の要領で値を参照したり設定したりすることができます。

#!/usr/bin/perl

use strict;
use warnings;

use DBI;

my $dbh = DBI->connect("data_source","user_name","password");

# 値の参照
print "LongReadLen is '", $dbh->{LongReadLen}, "'\n";
print "LongTruncOk is '", $dbh->{LongTruncOk}, "'\n";

# 値の設定
$dbh->{LongReadLen} = 160;
$dbh->{LongTruncOk} = 1;
 

ちなみにそれぞれの初期値については、LongReadLen が 80(単位はバイト)で、LongTruncOk が false(正確には空の文字列?)がセットされています。

各プロパティの詳しい意味については DBI のドキュメント を読んでいただくとして、要はフェッチするために必要なバッファが小さかったのがエラーの原因なので、先に LongReadLen に大きめの値を設定しておけば、ちゃんとフェッチしてくれます。

また、LongTruncOk に true(0 や 空の文字列 や undef でない何か)を設定しておくと、バッファに取り込める分だけ取り込んで(残りは破棄して)、エラーにせずにフェッチ処理を続行させる事ができます。

参考リンク
 ・Perl DBI - dbi.perl.org
 ・DBI - search.cpan.org
 ・Introduction to retrieving data from your database - Perl DBI/DBD::ODBC Tutorial Part 2
 ・perl - Database fetchrow_array failed long truncated DBI attribute - Stack Overflow
 ・RE: DBD-ODBC/MS SQL Server - right truncation error « perl-win32-database « ActiveState List Archives

入門Perl DBI
入門Perl DBI
posted with amazlet at 13.05.09
アリゲータ デカルト ティム バンス
オライリー・ジャパン

スポンサーリンク
コメント
Verify your Comment
Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

コメントを投稿

プロフィール


  • 書いてる人:夢界 陸

    名古屋在住のおっさん。
    プログラミングやガジェットの話など、 日々の興味を徒然と綴っています。



    Twitterやってます @mukairiku

    運営サイト
    www.mukairiku.net

ブログ内検索

Licenses

  • Creative Commons License

OTHER

  • このブログのはてなブックマーク数

Blog powered by TypePad

スポンサーリンク