gpt4 book ai didi

perl - DBI 在获取行时可以推断或获知数字列类型吗?

转载 作者:行者123 更新时间:2023-12-04 10:25:09 27 4
gpt4 key购买 nike

假设我正在查询一个类似于以下内容的表:

$dbh->selectrow_hashref('SELECT id, name FROM foos WHERE name = "bar"');

当然, id将是一个整数,但生成的 hashref 将有一个值在内部存储为 Perl PV 而不是 IV。这反过来又会在将数据序列化为 JSON 时产生不良结果。

当然也可以手动调用 0+在值(value)上,但有没有办法拥有 DBI自动将它存储为一个实际的整数,而不仅仅是一个看起来像数字的字符串?还承认 DBIx::Class和 friend 有解决这个问题的办法,但是 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;
}

这试图将第一列(从一个索引)绑定(bind)到 SQL_INTEGER如果任何值的强制转换失败,则键入并抛出错误。如 bohica notes , DiscardString属性是必要的,因为它“丢弃了数据的字符串部分(pv)”。

* 根据 DBI 文档:

Few drivers support specifying a data type via a bind_col call (most will simply ignore the data type).


DBD::OracleDBD::ODBC支持它, DBD::Pg可能支持它,根据 this thread (虽然我无法验证),而 DBD::mysql没有。我不确定其他驱动程序。

关于perl - DBI 在获取行时可以推断或获知数字列类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com