gpt4 book ai didi

mysql - 为什么 DBI 隐式地将整数更改为字符串?

转载 作者:可可西里 更新时间:2023-11-01 07:51:11 24 4
gpt4 key购买 nike

我有一个具有以下结构的 MySQL 表。

alid       bigint(20),
ndip varchar(20),
ndregion varchar(20),
occ_num int(3),
Delta_Flag int(1)

从表中选择数据后,我得到所有引用的数据并作为字符串值。

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;
use FindBin;
use lib $FindBin::Bin;
use Database;

my $pwd = $FindBin::Bin;

my $db = Database->new( 'mysql', "$pwd/config.ini" );
my $db1 = Database->new( 'mysql', "$pwd/config2.ini" );

my @tables = qw( AutoTT_AlarmStatus_Major1 );

for my $table ( @tables ) {

my $query_select = "SELECT alid, ndip, ndregion, occ_num, Delta_Flag FROM $table LIMIT 1";
my $result = $db->db_get_results( $query_select );

print Dumper( $result );

for my $item ( @{$result} ) {

# Here I want to prepare, bind and insert this data
# into other table with same structure
}
}

数据库.pm

sub db_get_results {
my $self = shift;
my $qry = shift;

my $sth = $self->{dbh}->prepare( $qry );
$sth->execute();

my @return = ();
while ( my @line = $sth->fetchrow_array ) {
push @return, \@line;
}

return \@return;
}

输出:

$VAR1 = [
[
'1788353',
'10.34.38.12',
'North Central',
'1',
'1'
]
];

为什么 DBI 将所有整数隐式转换为字符串?

最佳答案

正如@choroba 在他的回答中指出的那样,不是 DBI 在对数据进行任何操作。它只是传递驱动程序模块(在您的情况下为 DBD::mysql)返回的内容。

General Interface Rules & Caveats它说的 DBI 文档部分:

Most data is returned to the Perl script as strings. (Null values are returned as undef.) This allows arbitrary precision numeric data to be handled without loss of accuracy. Beware that Perl may not preserve the same accuracy when the string is used as a number.

我在将 perl 配置为支持 64 位整数并且 long-double 浮点类型不常见之前的日子里写过。现在我建议驱动程序以最“自然”的 Perl 类型返回值,这样不会有数据丢失的风险。

对于某些可能难以实现的驱动程序,尤其是那些支持从单个句柄返回具有不同列数的多个结果集的驱动程序,如 DBD::mysql。

我浏览了 DBD::mysql docs但没有看到任何关于这个主题的提及,所以我查看了the relevant code在那里我可以看到当前的 DBD::mysql 正在 返回数字作为数字。还有很多 references to recent changes in this area in the Change log .

也许您使用的是旧版本的 DBD::mysql,应该升级。

关于mysql - 为什么 DBI 隐式地将整数更改为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800205/

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