我想知道使用一个比另一个有什么优点和缺点。这个问题源于我在这里得到的一个建议:根据记录的实际大小为DB查询动态分配缓冲区
我正在寻找一份重要差异的清单(而不是详尽的清单),这将帮助我做出明智的决定。我有使用win32::odbc的工作经验,并且可以真诚地证明这一点。如果有人能在"枯燥"的文档细节之上分享他/她的经验,那将非常有帮助。
其他信息:Win32::ODBC的作者在这里写道:http://www.roth.net/perl/odbc/docs/ODBC_Docs.htm-"有几种Win32::ODBC的替代方案,如名为DBD::ODBC的数据库接口(DBI)版本。此ODBC Perl扩展可在不同的平台(如Mac和UNIX)上使用。它是一个很好的工具,可用于ODBC访问数据库,尽管它缺乏Win32::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层也可能有好处。
更新:Win32::ODBC是ODBC中间件API从C到Perl的相对直接的转换。如果您愿意将自己限制在Windows上的ODBC连接,那么这确实有一个相对较小的优势,即可以更直接地控制控制底层数据库的ODBC中间件层。当然,这并不意味着ODBC API特别忠实于底层数据库的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
&CCD_ 17使用的软件堆栈越短。尽管我也会猜测,涉及DBD::ODBC
的较长堆栈将适合99%以上的所有需求,即使有两个垫片层。
CCD_ 19&CCD_ 20是指有许多模块围绕CCD_ 21堆栈构建。整个DBIx
命名空间都依赖于它。在metacpan.org上搜索这些模块中的每一个,然后点击它们页面上的"反向依赖项"链接,你就会看到Perl社区为每个模块分配的相对值的清晰画面。
因此,如果你想要一个额外的、纯粹自私的原因:一个在DBI方面有经验的Perl开发人员也会发现自己的需求越来越大。认真地