【问题标题】:Difference between FreeTDS and unixodbc?FreeTDS 和 unixodbc 的区别?
【发布时间】:2015-08-13 06:29:07
【问题描述】:

我正在尝试弄清楚这两个拼图在连接到 Linux 上的 MS-SQL 服务器时如何交互和组合在一起。

据我了解,FreeTDS 是与 MS-SQL 对话的协议(即一组规则),它是真正进行对话的东西。 Unixodbc 是一个实现 ODBC API 的驱动程序,即实现了我猜的一组函数。

为什么这两件事都是必要的?谁能详细说明我对这两件事的实际作用的粗略理解?

【问题讨论】:

    标签: freetds unixodbc


    【解决方案1】:

    unixODBC 是 ODBC 的“DriverManager”。在 Linux 或 *nix 系统上,您可以使用 unixODBC 连接到任何支持 ODBC 的数据库。这样做意味着您可以编写大量的数据库查询,您应该能够在不同的数据库之间使用这些查询。如果您不在 Unix 上,您将使用不同的驱动程序管理器,例如内置的 MS Office 驱动程序管理器。

    为了明确所有组件:如果您使用一种语言(例如 Python)连接到 SQL Server,您的连接可能会从 Python 的 pyodbc(将 python 对象与 unixODBC 相互转换)传递到 unixODBC(管理驱动程序) ,例如 FreeTDS)到 FreeTDS(将 unixODBC 对象与 Microsoft 采用的 TDS 协议相互转换)到 SQL Server。

    unixODBC 网站http://www.unixodbc.org/ 说:

    ODBC 应用程序对 DriverManager 进行 ODBC 调用。 DriverManager 为应用程序执行许多任务,例如:

    • 确保加载/卸载正确的驱动程序
    • 验证任务
    • 3.5 到 3.0 到 2.0 调用和数据映射

    大多数对 DriverManager 的调用都会传递给加载的驱动程序以进行进一步处理,但这与应用程序无关。

    使用 ODBC DriverManager 的一些优点包括:

    • 便携式数据访问代码
    • 运行时绑定到数据源
    • 能够轻松更改数据源

    简而言之,是驱动程序管理器读取您的 DSN,查看配置的数据源,并决定连接的位置和方式。

    根据您使用的数据库,您将需要不同的驱动程序。这段代码将您使用 ODBC 发出的请求“翻译”为相关数据库管理系统的正确协议。对于不同的数据源,这是需要不同的组件。在您的情况下,TDS 是 MS SQL Server 使用的协议。 FreeTDS 是该协议的免费软件实现。

    另见维基百科https://en.wikipedia.org/wiki/Open_Database_Connectivity(重点保留):

    ODBC 通过使用 ODBC 驱动程序 作为应用程序和 DBMS 之间的转换层来实现 DBMS 的独立性。应用程序通过与其链接的 ODBC 驱动程序管理器 使用 ODBC 函数,并且驱动程序将查询传递给 DBMS。可以认为 ODBC 驱动程序类似于打印机驱动程序或其他驱动程序,提供一组标准功能供应用程序使用,并实现特定于 DBMS 的功能。可以使用 ODBC 的应用程序称为“兼容 ODBC”。任何符合 ODBC 的应用程序都可以访问安装了驱动程序的任何 DBMS。驱动程序适用于所有主要的 DBMS、地址簿系统和 Microsoft Excel 等许多其他数据源,甚至适用于文本或 CSV 文件。

    【讨论】:

    • 很好的答案。为了简化实际示例,如果您使用一种语言(例如 Python)连接到 SQL Server,您的连接可能从 Python 的 pyodbc(将 python 对象与 unixODBC 相互转换)传递到 unixODBC(管理器驱动程序,例如 FreeTDS)到 FreeTDS(将 unixODBC 对象与 Microsoft 采用的 TDS 协议相互转换)到 SQL Server。
    • 非常感谢您的评论@FlipperPA,您介意我将其编辑到答案中吗,因为我认为它使事情变得非常清楚?
    • 加油!无论什么最能帮助别人,它都是一个令人困惑的堆栈。 :)
    【解决方案2】:

    FreeTDS 是 TDS 协议的实现,它处理所有事情并且完全能够在没有 unixODBC 的情况下运行。

    ODBC 是 FreeTDS 的包装器,并提供了一个比 FreeTDS 的内部 API 有更好文档记录的通用 API。

    正如 FreeTDS.org/faq.html 所示: FreeTDS 提供三个客户端库和一个内部库(libtds)。我们通常鼓励人们使用其中一个客户端库,而不鼓励向 libtds 写入内容,因为后者正在不断发展,更容易发生变化,文档记录较少且更难使用。

    这两部分都不是必需的,只是有些人更喜欢使用包装器而不是学习新的 API 来执行与他们在不同 API 中已经知道的类似的事情。正如 FreeTDS 的常见问题解答所示,它们支持除 ODBC 之外的其他开放 API,并且它们的内部库完全能够自行处理连接。

    【讨论】:

      猜你喜欢
      • 2012-09-09
      • 2011-02-24
      • 2019-12-20
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      • 2018-01-30
      相关资源
      最近更新 更多