FreeTDS和unixodbc的区别?

问题描述:

我正在努力解决在Linux上连接到MS-SQL服务器时,这两块拼图如何交互和拼合在一起。FreeTDS和unixodbc的区别?

据我所知,FreeTDS是与MS-SQL交谈的协议(即一组规则),它实际上是在说话。 Unixodbc是一个实现ODBC API的驱动程序,即实现了我猜测的一组函数。

为什么这两件事都是必需的?任何人都可以详细说明我对这两件事实际上做的粗略理解吗?

unixODBC是ODBC的'DriverManager'。在Linux或* nix系统上连接任何支持ODBC的数据库时,可以使用unixODBC。这样做意味着您可以编写大量的数据库查询,您应该可以在不同的数据库之间使用这些查询。如果你不在Unix上,你会使用不同的驱动管理器,例如内置的MS Office。为了使所有的组件清楚:假如你使用Python,连接到SQL Server,你的连接可能会从Python的pyodbc(将python对象转换为unixODBC和从unixODBC转换而来)传递给unixODBC(管理驱动程序,如FreeTDS)到FreeTDS(将unixODBC对象转换为Microsoft支持的TDS协议以及从TDS协议转换到SQL Server)。

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

ODBC应用程序使ODBC调用到DriverManager的。 DriverManager将执行用于应用如许多任务:

  • 确保适当的驱动程序被装载/卸载
  • 验证任务
  • 3.5至3.0至2.0的呼叫和数据映射

大多数对DriverManager的调用都被传递到加载的Driver上,以便进一步处理,但这对应用程序来说并不重要。

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

  • 便携式数据访问代码
  • 运行时绑定到数据源
  • 能力容易地改变数据源

简而言之,它是驱动程序管理器,它读取您的DSN,查看配置的数据源,并决定在哪里以及如何连接。

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

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

ODBC通过使用ODBC驱动程序为应用程序和数据库管理系统之间的转换层完成DBMS的独立性。应用程序通过与它连接的ODBC驱动程序管理使用ODBC函数,而驱动程序将查询到的DBMS。 ODBC驱动程序可以被认为与打印机驱动程序或其他驱动程序类似,为应用程序提供一组标准函数以供使用,并实现特定于DBMS的功能。可以使用ODBC的应用程序称为“符合ODBC”。任何符合ODBC的应用程序都可以访问安装了驱动程序的任何DBMS。所有主要DBMS,许多其他数据源(如地址簿系统和Mi​​crosoft Excel)以及文本或CSV文件都存在驱动程序。

+1

伟大的答案。为了简化在一个真实世界的例子,如果你使用的语言,让我们说的Python,以连接到SQL Server,您的连接可能会从Python的pyodbc通(把Python对象和unixODBC的),到了unixODBC(经理司机,如FreeTDS)到FreeTDS(将unixODBC对象转换为Microsoft支持的TDS协议以及从TDS协议转换到SQL Server)。 – FlipperPA

+0

非常感谢您的评论@FlipperPA,您是否介意我将它编辑为答案,因为我认为它使事情变得非常清晰? – jwg

+0

去吧!无论对他人最有帮助,这是一个令人困惑的堆栈。 :) – FlipperPA