2013-03-25 43 views
1

本示例输出两次“blob”。我怎么能发现,如果列的数据类型是TEXTDBI/DBD :: mysql/mysql_type_name:如何区分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' 
     ]; 

回答

0

一般来说,当你与数据库的工作,你知道什么是数据字段并使用fetch_hashref或fetch_arrayref功能,并获得所需的数据(在你的情况下,字段的Foo(文本)和Bar(Blob)),我没有得到你想在这里做什么? ,如果你需要从Foo/Bar获取数据,你应该使用fetch_arrayref或hashref函数,我也看到'use strict'你仍然设法将裸号'mysql_type_name'传递给语句句柄$ sth。

0

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

我不知道为什么DBD :: mysql无法区分这两者。您可能想使用VARCHAR而不是TEXT。