我正在尝试弄清楚当连接到linux上的MS-SQL服务器时,这两个拼图是如何交互在一起的。
据我了解,FreeTDS是用于与MS-SQL交谈的协议(即一组规则),它实际上是在进行交谈。 Unixodbc是一个实现ODBC API的驱动程序,即我实现了一组函数。
为什么两件事都必要?任何人都可以详细说明我对这两件事实际做了什么的粗略理解吗?
答案 0 :(得分:9)
unixODBC
是一个' DriverManager'用于ODBC。您可以在Linux或* nix系统上使用unixODBC
连接到任何支持ODBC的数据库。这样做意味着您可以编写一些您应该能够在不同数据库之间使用的数据库查询。如果您不在Unix上,则可以使用不同的驱动程序管理器,例如内置的MS Office。
要清除所有组件:如果您正在使用某种语言,让我们说Python,要连接到SQL Server,您的连接可能会从Python的pyodbc传递(将python对象转换为从unixODBC)到unixODBC(管理驱动程序,如FreeTDS),到FreeTDS(将unixODBC对象转换为微软所拥有的TDS协议)到SQL Server。
{{1}}网站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文件都存在驱动程序。
答案 1 :(得分:1)
FreeTDS 是 TDS 协议的实现,它处理一切并且完全能够在没有 unixODBC 的情况下运行。
ODBC 是 FreeTDS 的包装器,并提供比 FreeTDS 的内部 API 更好地记录的通用 API。
正如 FreeTDS.org/faq.html 所指出的: FreeTDS 提供了三个客户端库和一个内部库 (libtds)。我们通常鼓励人们使用其中一个客户端库,并且不鼓励写入 libtds,因为后者在不断发展,更容易发生变化,文档较少且更难使用。
这两部分都不是必需的,只是有些人更喜欢使用包装器而不是学习新的 API 来做一些类似于他们在不同 API 中已经知道的事情。正如 FreeTDS 的 FAQ 所示,它们支持 ODBC 以外的其他开放 API,并且它们的内部库完全能够自行处理连接。