> Isn't irrelevant what Perl thinks of a variable's type when DB already knows/was told what the type of that column should be at create time?
some testing on MariaDB
CREATE TABLE `t_test_type` (
`f_num` INT(11) NULL DEFAULT NULL,
`f_str` CHAR(50) NULL DEFAULT NULL
)
ENGINE=MyISAM
;
It looks like you could get what you want from the ansi information_schema and a query like the one below that worked for me under MySQL. I have read that not all DBMS support information_schema.
> SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 't_test_type' AND column_name IN ('f_num', 'f_str')
+;
+-------------+-----------+
| column_name | data_type |
+-------------+-----------+
| f_num | int |
| f_str | char |
+-------------+-----------+
2 rows in set (0.00 sec)
DBI has a column_info method that seems to guarantee DATA_TYPE code and TYPE_NAME fields, if implemented by the driver which should be true for MariaDB based (only) on looking at the source.
#!/usr/bin/env perl
use warnings;
use strict;
use DBI;
my $dsn = "DBI:mysql:database=mysql";
my $dbh = DBI->connect($dsn,
... , #user name and password
{ RaiseError => 1 }
) or die $DBI::errstr;
my $info = $dbh->column_info(
undef, 'mysql', 't_test_type', '%'
)->fetchall_hashref('COLUMN_NAME');
while (my ($col, $col_info) = each %$info) {
print "$col $col_info->{ DATA_TYPE } $col_info->{ TYPE_NAME }\n";
}
Output:
f_str 1 CHAR
f_num 4 INT