Sql DBD::ODBC与win32::ODBC

Sql DBD::ODBC与win32::ODBC,sql,database,perl,odbc,dbd,Sql,Database,Perl,Odbc,Dbd,我想知道使用一个比另一个有什么优点和缺点。这个问题源于我在这里得到的一个建议: 我正在寻找一份重要差异的清单(而不是详尽的清单),这将帮助我做出明智的决定。 我有使用win32::odbc的工作经验,并能就此提供真实的证明。如果有人能在“枯燥”的文档化细节之上分享他/她的经验,这将非常有帮助 其他信息: Win32::ODBC的作者在这里写道:-“Win32::ODBC有几种替代方案,例如数据库接口(DBI)名为DBD::ODBC的版本。此ODBC Perl扩展可在Mac和UNIX等不同平台上使

我想知道使用一个比另一个有什么优点和缺点。这个问题源于我在这里得到的一个建议:
我正在寻找一份重要差异的清单(而不是详尽的清单),这将帮助我做出明智的决定。 我有使用win32::odbc的工作经验,并能就此提供真实的证明。如果有人能在“枯燥”的文档化细节之上分享他/她的经验,这将非常有帮助

其他信息: Win32::ODBC的作者在这里写道:-“Win32::ODBC有几种替代方案,例如数据库接口(DBI)名为DBD::ODBC的版本。此ODBC Perl扩展可在Mac和UNIX等不同平台上使用。尽管它缺少Win32::ODBC所具有的一些功能,但它是用于ODBC访问数据库的好工具。”
我想知道您是否知道它缺少什么功能。

我选择使用
DBI
堆栈的主要原因是灵活性和更多的测试人员/调试器。使用
DBI
您可以选择使用专门针对特定数据库引擎调整的驱动程序。是的,大多数数据库也提供ODBC驱动程序,但是通过特定的API,某些特定的功能可能不可用或更麻烦。此外,
DBI
是独立于平台的,使得将来任何可能的移植到另一个操作系统的麻烦都小得多。最后,使用
DBI
访问数据库的人数远远超过了使用
Win32::ODBC
访问数据库的人数,这意味着很可能更快地发现并修补漏洞

看看你的另一个链接问题,我注意到你正在使用Oracle。使用
DBI
您可以选择在引擎盖下使用
DBD::ODBC
DBD::Oracle
。您可以通过对
DBI->connect
方法的一个参数进行简单更改来进行此选择

如果您使用的是Oracle的Instant Client,那么使用
DBD::Oracle
可以省去在只需要通过Perl访问的机器上下载/安装ODBC组件的麻烦。当然,从等式中删除ODBC层也可能有好处


更新: ODBC是ODBC中间件API从C到Perl的相对直接的转换。如果您愿意将自己限制在Windows上的ODBC连接上,那么这样做的好处相对较小,可以让您更直接地控制控制底层数据库的ODBC中间件层。当然,这并不意味着odbcapi特别忠实于底层数据库的API和/或功能

同样,假设您正在使用Oracle,您似乎有3种选择:

  • Win32::ODBC
    ->ODBC->Oracle的ODBC驱动程序~>Oracle客户端->Oracle服务器
  • DBI
    ->
    DBD::Oracle
    ~>Oracle客户端->Oracle服务器
  • DBI
    ->
    DBD::ODBC
    ~>ODBC->Oracle的ODBC驱动程序~>Oracle客户端->Oracle服务器
其中,“~>”位于需要“填充”一个API以适应另一个API的层的右侧

现在我可以理解,如果您认为API对ODBC中间件的忠实度是可取的。就我个人而言,我更希望具有
DBI
的灵活性,这是
DBD::Oracle使用的较短的软件堆栈。尽管我也会猜测,涉及
DBD::ODBC
的较长堆栈将满足99%以上的所有需求,即使有两个垫片层

DBI
Win32::ODBC
之间的另一个区别是围绕
DBI
堆栈构建了许多模块。整个
DBIx
命名空间都依赖于它。在metapan.org上搜索这些模块中的每一个,并单击它们页面上的“反向依赖项”链接,您将获得Perl社区分配给每个模块的相对值的清晰图像


因此,如果您想要一个额外的、纯粹自私的理由:具有DBI经验的Perl开发人员也会发现自己的需求更大。认真地说。

请看我编辑的问题。另外,您将Win32和DBI放在何处。Win32::ODBC是另一个数据库访问模块吗?它与DBI有何不同?