SQL_BIT is defined, when I ran:
use DBI qw(:sql_types);
use Data::Dumper;
#use strict;
use warnings;
foreach (sort @{$DBI::EXPORT_TAGS{sql_types}}) {
printf "%s=%d\n", $_, &{"DBI::$_"};
}
One of the output line says:
SQL_BIT=-7
So there was some hope... However the following code compiled okay, but still gave the same error (data too long):
use DBI qw(:sql_types);
use Data::Dumper;
use strict;
use warnings;
my $dsn = "DBI:mysql:database=test;host=foo";
my $dbh = DBI->connect($dsn, 'root', 'root', {RaiseError => 1});
my $insert = "insert into test(a) value(?)";
my $select = "select * from test";
my $insert_st = $dbh->prepare($insert);
my $select_st = $dbh->prepare($select);
$insert_st->bind_param(1, 3, SQL_BIT);
$insert_st->execute() or die $dbh->errstr;
$select_st->execute();
my $ref = $select_st->fetchall_arrayref();
print Dumper($ref);
This further proves to me that, just like Zaxo and I diiscussed in private, this is a bug, integer was not trimed to fit.
By the way, I tested Zaxo's chr(3) bit, and that worked.
Or we can put it in virtualsue's way, the DBD has not yet updated for MySQL 5. By the way, MySQL only started to support BIT data type in version 5. |