Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了perl – 在获取行时,DBI可以推断或了解数字列类型吗?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我正在查询表格,如下所示:
$dbh->SELEctrow_hashref('SELECT id,name FROM foos WHERE name = "bar"');

当然,id将是一个整数,但生成的hashref将在内部存储一个值作为Perl PV而不是IV.反过来,当将数据序列化为例如JSON时,这将产生不希望的结果.

当然,可以在值上手动调用0,但有没有办法让DBI自动将其存储为实际整数而不仅仅是一个看起来像数字的字符串?同时也承认DBIx :: Class和朋友有解决这个问题的方法,但DBI的寂寞呢?

解决方法

根据您的数据库驱动程序,您可以*在 bind_col中使用类型提示:
use DBI qw(:sql_types);

...

my $sth = $dbh->prepare('SELECT id,name FROM foos WHERE name = "bar"');
$sth->execute;

$sth->bind_col(1,undef,{
    TYPE => SQL_IntegeR,StrictlyTyped => 1,DiscardString => 1
});

while (my $hr = $sth->fetchrow_hashref) {
    say to_json $hr;
}

这会尝试将第一列(从一个索引编译)绑定到SQL_IntegeR类型,如果转换为任何值失败,则会引发错误.作为bohica notes,DiscardString属性是必要的,因为它“抛弃了数据的字符串部分(pv).”

*根据DBI文档:

根据this thread(我无法验证它),DBD :: Oracle和DBD :: ODBC支持它,DBD :: Pg可能支持它,而DBD :: mysql则不支持它.我不确定其他车手.

大佬总结

以上是大佬教程为你收集整理的perl – 在获取行时,DBI可以推断或了解数字列类型吗?全部内容,希望文章能够帮你解决perl – 在获取行时,DBI可以推断或了解数字列类型吗?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。