> 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
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.