当我连接到linux上的MS服务器时,我正在试图找出这两块拼图是如何交互和协调的。
据我所知,FreeTDS是用于与MS对话的协议(即一组规则),它实际上是用来进行对话的。Unixodbc是实现ODBC的驱动程序,即实现一组函数。
为什么这两件事都是必要的?有人能详细说明我对这两件事到底做了什么的粗略理解吗?
发布于 2015-08-13 06:42:35
unixODBC是ODBC的“DriverManager”。您可以在Linux或*nix系统上使用unixODBC连接到任何具有ODBC功能的数据库。这样做意味着您可以编写许多数据库查询,您应该能够在不同的数据库之间使用这些查询。如果您不在Unix上,您将使用不同的驱动程序管理器,例如内置的。
为了明确所有组件:如果您正在使用一种语言(比如Python )连接到Server,您的连接可能会从python的pyodbc (将python对象转换到和从unixODBC)、从unixODBC (管理驱动程序,如FreeTDS)到FreeTDS (将unixODBC对象转换到和从Microsoft所拥抱的TDS协议)传递到Server。
unixODBC网站http://www.unixodbc.org/说:
ODBC应用程序对DriverManager进行ODBC调用。DriverManager为应用程序执行许多任务,如:
对DriverManager的大多数调用都会传递到加载的驱动程序上,以便进一步处理,但这与应用程序无关。
使用ODBC DriverManager的一些优点包括:
简单地说,是驱动程序管理器读取您的DSN,查看配置的数据源,并决定在何处和如何连接。
根据您使用的数据库,您将需要一个不同的驱动程序。这段代码将使用ODBC发出的请求“转换”为相关数据库管理系统的正确协议。对于不同的数据源,这是一个需要不同的组件。在您的示例中,TDS是MS SQL Server使用的协议。FreeTDS是该协议的免费软件实现。
另请参阅维基百科Connectivity (重点保持):
ODBC通过使用ODBC驱动程序作为应用程序和DBMS之间的转换层来实现DBMS的独立性。应用程序通过与其链接的ODBC驱动程序管理器使用ODBC函数,驱动程序将查询传递给DBMS。ODBC驱动程序可以被认为类似于打印机驱动程序或其他驱动程序,为应用程序提供了一组标准功能,并实现了特定于DBMS的功能。可以使用ODBC的应用程序称为“ODBC兼容”。任何符合ODBC的应用程序都可以访问安装了驱动程序的任何DBMS .驱动程序存在于所有主要的DBMS,许多其他数据源,如地址簿系统和Microsoft,甚至是文本或CSV文件。
发布于 2021-08-02 20:10:43
FreeTDS是TDS协议的实现,它处理一切事务,完全可以不使用unixODBC进行操作。
ODBC是一个围绕FreeTDS的包装器,它提供了一个比FreeTDS的内部API更有文档化的通用API。
正如FreeTDS.org/faq.html所指出的: FreeTDS提供了三个客户端库和一个内部库(Libtd)。我们通常鼓励人们使用其中一个客户端库,并不鼓励编写libtd,因为libtd是不断发展的,更容易更改,文档不那么完整,更难使用。
这两部分都是不必要的,只是有些人更喜欢使用包装器,而不是学习新的API来做类似于他们在不同API中已经知道的事情。正如FreeTDS的FAQ所指出的,它们支持ODBC以外的其他开放API,并且它们的内部库完全能够单独处理连接。
https://stackoverflow.com/questions/31980980
复制相似问题