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

2023-12-08

我有一个具有以下结构的 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;
}

Output:

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

Why is DBI隐式将所有整数转换为字符串?


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

In the 一般接口规则和注意事项DBI 文档的部分内容如下:

大多数数据作为字符串返回到 Perl 脚本。 (空值以 undef 形式返回。)这允许处理任意精度的数字数据,而不会损失准确性。请注意,当字符串用作数字时,Perl 可能无法保持相同的精度。

我在配置 Perl 支持 64 位整数很常见之前写过这篇文章,而且长双精度浮点类型也不常见。如今,我建议驱动程序以最“自然”的 Perl 类型返回值,这样不会有数据丢失的风险。

对于一些难以实现的驱动程序,特别是那些支持从单个句柄返回具有不同列数的多个结果集的驱动程序,如 DBD::mysql 所做的那样。

我浏览了一下DBD::mysql 文档但没有看到任何提及这个主题,所以我查看了相关代码我可以在哪里看到当前的 DBD::mysqlis将数字返回为数字。还有很多在更改日志中引用此区域的最新更改.

也许您正在使用旧版本的 DBD::mysql 并且应该升级。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 DBI 会隐式地将整数更改为字符串? 的相关文章

  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • MYSQL - 查找最近的前一天

    我可以以某种方式 不使用 PHP 找到一周中最近的前一天日期吗 Like 最近的上一个星期二的日期是哪一天 CURDATE INTERVAL WEEKDAY CURDATE wday IF WEEKDAY CURDATE gt wday 0
  • 截断 Mysql 表 Cron 作业?

    我在如何使用 cron 作业截断 Mysql 表时遇到了一些麻烦 无论我尝试什么 我似乎都无法让数据库清除表格 感谢您的帮助 mysql uderp example pexample hlocalhost Dexample e TRUNCA
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 如何确保我的代码永远不会直接退出?

    eval require file subsequent code goes here If file包含一个exit语句 后面的代码就没有机会运行 如何解决以便后续代码始终有机会运行eval已经完成了 中止是不可能的exit call f
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • MySQL连接字符集问题

    我在 Mac 上使用带有 MySQL 的 velosurf 没有任何编码问题 但是当我切换到 Linux 计算机时 从 velosurf 获得的值未正确编码 我发现这可能是默认连接字符集的问题 在 Mac 上我得到 mysql gt sho
  • 使用 SIGINT 默认处理程序时从 system() 返回值

    我遇到了一些奇怪的返回值system 当子进程从终端接收到 SIGINT 时 解释一下 从 Perl 脚本parent pl I used system 运行另一个 Perl 脚本作为子进程 但我还需要通过 shell 运行子进程 所以我使
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 如何修改现有表以添加时区

    我有一个包含 500 多个表的大型应用程序 我必须将应用程序转换为时区感知 当前应用程序使用new java util Date GETDATE 与服务器的时区 即没有任何时区支持 我已将这项任务分为几个步骤 以便于开发 我确定的第一个步骤

随机推荐

  • Scrapy 使用随机代理池来避免被禁止

    我对 scrapy 很陌生 而且我的背景不是信息学 我有一个网站 我无法使用我的本地 IP 访问 因为我被禁止 我可以使用浏览器上的 VPN 服务访问它 为了让我的蜘蛛能够爬行它 我设置了一个我在这里找到的代理池http proxylist
  • java中的随机唯一数

    我正在尝试获取随机数列表并将其放入队列中 而不会重复随机数 int number 40 for int j 0 j
  • Openexisting 全局互斥体上出现 UnauthorizedAccessException

    我正在使用互斥体来同步两个进程 互斥体是由服务进程创建的 但是 当客户端尝试访问该互斥体时 他会收到 UnauthorizedaccessException 用户帐户具有创建全局对象的权限 这种情况发生在少数运行 Windows 7 的计算
  • 使用 vba 解析 JSON 时遇到问题

    我能得到什么appears作为来自 Web 查询的有效 JSON 字符串 但是我一生都无法正确设置项目 需要确认我没有失去理智 Call for available reports Dim URLReporta As String Dim
  • 条件匹配后仅运行一次 jQuery 事件

    我正在制作在线产品网站 我正在触发一个滚动事件 开始时仅显示 12 个元素 但是当第 8 个元素滚动到顶部时 滚动事件应该只运行一次 但每次向下滚动时它都会运行 请帮助 这是我的代码 var navigation offset top pr
  • hadoop用户文件权限

    我在 hortonworks 和 cloudera 中设置 hadoop 文件权限时遇到问题 我的要求是 1 create a new user with new group 2 create user directory in hdfs
  • 使用 AND 条件进行一对多搜索

    我有以下包含多种颜色的产品 我希望找到至少包含红色和绿色的产品 Product class String id List
  • 如何使用 Microsoft graph api 从 Office 365 恢复已删除的邮件

    我想恢复我们使用 Microsoft graph api 删除的邮件 我没有找到任何 api 来使用 api 来恢复或恢复已删除的邮件 Graph API 中没有恢复方法 MAPI 或 EWS 中也没有 当某个项目在 Exchange 中被
  • 在 vector.push_back() 导致重新分配后,如何让向量迭代器指向向量?

    我有一个函数void AddEntity Entity addtolist 将元素推回到vector但由于当元素添加到时大小和容量是相等的vector 向量重新分配并且iterator变得无效 然后 当我尝试增加迭代器时 由于迭代器无效 我
  • 为什么允许可变成员的协变子类型?

    可变集合的不变性 内置的理由mutablePython 中的集合类型有不变的两者都得到了很好的解释PEP 483 and PEP 484以及一个很好的说明性示例 专门说明了原因list是不变的Mypy 文档关于这个主题 class Shap
  • Android:扩展 SeekBar 时如何从 AccessibilityEvents 中消除语音文本?

    我的 Android 应用程序包含一个基于SeekBar 并且我想将自定义文本短语附加到我的控件以解释其对辅助功能的使用 我已经使用成功完成了此操作View setContentDescription text 当我请求将焦点集中在滑块控件
  • 使用控件名称作为字符串转换为控件[重复]

    这个问题在这里已经有答案了 我的 XIB 中有几个文本字段 和标签 在我的应用程序中的某个时刻 我动态构建一个包含控件名称的字符串 即文本字段之一 如何使用我创建的保存文本字段名称的字符串来引用实际的文本字段 例如 我有 txt1 txt2
  • Windows Phone 8 - 2 背景音频冲突并且两个应用程序都终止

    大约一周前 我为 Windows Phone 商店提交了一个在线后台广播流应用程序 该应用程序非常好 当我使用模拟器对其进行测试时 它在所有可能的领域都很好 但是当我提交它进行认证时 它失败了 根据错误日志 如果有人已经在音乐 视频中心播放
  • 使用嵌套和根级别数据的 Elasticsearch 嵌套聚合比率

    我感觉像是一个简单的聚合 我有一个文档 其计时代码如下 task start 2020 06 03T21 19 07 908821Z task end 2020 06 03T21 27 00 323790Z sub tasks key su
  • Visual Studio 2010下LNK2019错误

    我在 Visual Studio 2010 下使用以下文件创建了一个示例 C 项目 A h ifndef A H define A H include
  • 如何正确设置 ios 标志以进行流操作?

    我在 C 中输入了一个基本示例 其中我尝试将一个数字以十六进制形式打印到屏幕上 如下所示 include
  • IEnumerable 没有 Count 方法

    我有以下方法 public bool IsValid get return GetRuleViolations Count 0 public IEnumerable
  • 与 React 之外的功能组件通信

    我希望能够从正常 HTML 中的组件外部与我的 React 组件进行通信 由于将组件嵌入到另一个系统中而需要 我一直在研究这个 我看到了您可以添加组件的建议window通过在渲染的元素上添加引用 如下所示 ReactDOM render
  • 使用 Python 生成报告:PDF 或 HTML 到 PDF

    Using maptplotlib我创建了 9 个图表 使用命令将它们组合成一个 pdfsavefig 但是我需要能够在每个图下方显示统计分析 describe 最好的方法是什么 Pandas 可以包含一张带有绘图的表格 请参阅table夸
  • 为什么 DBI 会隐式地将整数更改为字符串?

    我有一个具有以下结构的 MySQL 表 alid bigint 20 ndip varchar 20 ndregion varchar 20 occ num int 3 Delta Flag int 1 从表中选择数据后 我将获取所有引用的