1

この例では、「ブロブ」が 2 回出力されます。列のデータ型が であるかどうかを確認するにはどうすればよいTEXTですか?

#!/usr/bin/env perl
use warnings;
use strict;
use DBI;
use Data::Dumper;

my$dbh = DBI->connect( "DBI:mysql:dbname=test", 'user', 'passwd', {
    RaiseError => 1,
    AutoCommit => 1,
} ) or die DBI->errstr;

my $table = 'my_test_table';
$dbh->do( "DROP TABLE IF EXISTS $table" );
$dbh->do( "CREATE TABLE $table ( Foo TEXT, Bar BLOB )" );

my $sth = $dbh->prepare( "INSERT INTO $table ( Foo, Bar ) VALUES( ?, ? )" );
$sth->execute( 'a', 'a' );

$sth = $dbh->prepare( "SELECT * FROM $table" );
$sth->execute();

my $col_types = $sth->{mysql_type_name};
print Dumper $col_types;

出力:

$VAR1 = [
        'blob',
        'blob'
        ];
4

2 に答える 2

0

これは、mysql では BLOB と TEXT が (ほぼ) 同じものであるためです: The BLOB and TEXT Types .

DBD::mysql が 2 つを区別できない理由がわかりません。TEXT の代わりに VARCHAR を使用することもできます。

于 2013-03-25T15:53:39.313 に答える
0

一般に、データベースを操作するとき、データフィールドが何であるかを知っており、 fetch_hashref または fetch_arrayref 関数を使用して必要なデータを取得します(あなたの場合、フィールド Foo(Text) および Bar(Blob)) 、私はあなたが何をしようとしているのかわかりませんでしたここで達成するには?、Foo/Bar からデータを取得する必要がある場合は、fetch_arrayref または hashref 関数を使用する必要があります。また、'use strict' を使用しても、ベアワード 'mysql_type_name' をステートメント ハンドル $sth に渡すことができたことがわかります。

于 2013-03-25T15:32:45.733 に答える