1

此示例输出两次“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'
        ];
4

2 回答 2

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 回答
0

这是因为 BLOB 和 TEXT 在 mysql 中(几乎)是相同的:BLOB 和 TEXT 类型

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

于 2013-03-25T15:53:39.313 回答