在Linux上寻找odbc.ini和odbcinst.ini文件的良好文档

我看到了部分信息,旧信息,但没有像我在本地做简单评论的实际示例文件那么好。

我需要了解odbc.iniodbcinst.ini之间的确切关系。 从表面上看,这是非常明显的 – 在odbc.ini文件的顶部有一个部分,如:

 [ODBC Data Sources] MYDSN = MyDriverName ... 

但是,我不确定是否可以在驱动程序或DSN部分中进行设置。

1)我在这两个文件中都有一行Driver = /path/to/file/.so ,这些值有时会有所不同。 这是否有道理? 如果是这样,哪个盛行?

2) odbcinst.ini是一个类似JavaScript的“原型”为odbc.ini ? 换句话说,如果我使用通用设置创build多个DSN,是否可以将odbc.ini常用设置提升为odbcinst.ini

3)在odbcinst.iniDriverSetup什么不同? 他们似乎有相同的价值观。 这些设置是特定于数据库的还是通用的?

我在Debian上使用FreeTDS将一个php driven网站连接到MS-SQL Server 2005数据库。

我可以给configuration文件的解释:

/etc/odbc.ini

包含连接到数据库的处理程序(例如php )中引用的实例(请参见下面的示例)。 该configuration定义了它需要连接的服务器。

 [freetds_odbc_connection] Driver = FreeTDS Description = test Database = MyCompanyDb Server = frodo Readonly = Yes Port = 1433 Trace = No 

/etc/odbcinst.ini

保存odbc.iniDriver部分的configuration。

 [FreeTDS] Description = TDS connection Driver = /usr/lib/odbc/libtdsodbc.so Setup = /usr/lib/odbc/libtdsS.so UsageCount = 1 FileUsage = 1 Trace = Yes TraceFile = /tmp/odbcinst_tr 

show-companies.php

示例php代码来演示如何设置和使用连接。

  $host="freetds_odbc_connection"; $user="freetds"; $password="secretpassword"; $conn_id = odbc_connect($host, $user ,$password) or die (odbc_errormsg()); $sql_companies = "SELECT * from AMGR_Client_Tbl WHERE Record_Type='1'"; $query_companies = odbc_exec($conn_id, $sql_companies); while (odbc_fetch_row($query_companies)) { $client_id = odbc_result($query_companies, 6); $company_name = odbc_result($query_companies, 9); } 

等等。

我相信还有很多其他的variables可以被设置和使用,但是这是我所能提供的最简单的解释。

如果你只看Unix的实现,你会得到一些有关ODBC如何工作的有趣的想法。 这些实现中的任何一个都与由ODBC规范的维护者( 即Microsoft)生成的Windows上的参考实现完全可比。

在Unix上通常有两个ODBC驱动程序pipe理器。 iODBC , 这个问题的相关文件在这里 ,由我的雇主维护和支持。 UnixODBC是另一个,并在其他答案进行了讨论。 这些意味着相互等效的API和Windows实现,因为两者都是标准的平台不可知的实现。

简单地说, odbcinst.ini是环境中ODBC驱动程序的registry和configuration文件,而odbc.ini是ODBC DSN(数据源名称)的registry和configuration文件,通常基于在另一个中注册的驱动程序。

你有几个具体的问题

1)我在这两个文件中都有一行Driver = /path/to/file/.so ,这些值有时会有所不同。 这是否有道理? 如果是这样,哪个盛行?

当两者都被表示为path时, Driver = /path/to/file.so在两个文件中通常应该是相同的。 在odbc.ini ,该条目可以改为Driver = {name of driver} ,其中名称与odbcinst.ini索引相同。 一般来说, odbc.ini设置优先于odbcinst.ini冲突设置(如果存在)。

2) odbcinst.ini是一个类似JavaScript的“原型”为odbc.ini ? 换句话说,如果我使用通用设置创build多个DSN,是否可以将odbc.ini常用设置提升为odbcinst.ini

不, odbcinst.ini不是这样的“原型”。 odbcinst.ini设置与驱动程序有关,但与基于该驱动程序的DSN无关。

3)在odbcinst.iniDriverSetup什么不同? 他们似乎有相同的价值观。 这些设置是特定于数据库的还是通用的?

odbcinst.iniDriver =引用驱动程序库, Setup =引用Setup =库。 后者是完全可选的,当它存在时,可能在数据连接期间不需要使用; 它主要是为了在“build立”这样的连接时由ODBCpipe理员使用,并保存为DSN。 有时,这些库是在同一个物理文件中find的,但不一定是这样的,例如,通常不在OS X环境中。

好的简单的差异odbcinst.ini和odbc.ini从unixodbc网站这是谷歌的第一击:

系统文件odbcinst.ini包含有关所有用户可以使用的ODBC驱动程序的信息,odbc.ini文件包含有关所有用户可用的DSN的信息。 这些“系统DSN”适用于可能不作为真实用户运行的Web服务器等应用程序,因此不会有主目录包含.odbc.ini文件。

手册假设在这里 (点击Manuals然后User Manual )。 但不幸的是,“ Administrator Manual和“ Programmer Manual的链接被破坏了。 (我已经报告了这一点,并被告知他们将被修复。)

所以现在…

丢失的手册可以通过http://www.unixodbc.org/下载unixODBC-2.3.4.tar.gz find ,然后用存档pipe理器(或类似的)打开它,看看这三个手册:

 /doc/AdministratorManual/index.html /doc/ProgrammerManual/index.html /doc/ProgrammerManual/Tutorial/index.html