DBI / DBD :: mysql / mysql_type_name:如何区分Blob和Text?

时间:2013-03-25 13:50:00

标签: mysql perl text dbi sqldatatypes

此示例输出两次“blob”。如果列的数据类型是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'
        ];

2 个答案:

答案 0 :(得分:0)

通常当您使用数据库时,您知道数据字段是什么,并且您使用fetch_hashref或fetch_arrayref函数并获取所需数据(在您的情况下字段Foo(Text)和Bar(Blob)),我没有得到什么你想在这里实现吗? ,如果你需要从Foo / Bar获取数据,你应该使用fetch_arrayref或hashref函数,我也看到使用'use strict'你仍然设法将裸字'mysql_type_name'传递给语句句柄$ sth。

答案 1 :(得分:0)

这是因为BLOB和TEXT在mysql中几乎是一样的:The BLOB and TEXT Types

我不确定为什么DBD :: mysql无法区分这两者。您可能希望使用VARCHAR而不是TEXT。