0

我有我的 unixodbc odbc.ini 配置文件,如下所示:

[test]
Driver = /usr/local/lib/libmyodbc5-5.1.8.so
Description = Connector/ODBC 5.1.8 Driver DSN
SERVER = 127.0.0.1
PORT = 3306
USER = root
Password =
DATABASE = test
OPTION =
SOCKET =

问题是它不会使用上面指定的数据库,即“测试”。

我要做的是手动执行直接sql来更改数据库并运行我的查询:

SQLExecDirect(stmt, "USE test", SQL_NTS);
SQLExecDirect(stmt, "SELECT * FROM mytable", SQL_NTS);

关于我应该如何摆脱 mysql 命令的“使用测试”的任何想法。为什么 unixodbc 没有将 'test' 设置为默认数据库,因为它已经在 conf 文件中指定?

4

2 回答 2

1
[test]
Driver = /usr/local/lib/libmyodbc5-5.1.8.so
Description = Connector/ODBC 5.1.8 Driver DSN
SERVER = 127.0.0.1
PORT = 3306
USER = root
Password =
**DATABASE** = test
**OPTION** = **3**
**SOCKET** =

并且可以在 1,2 之间更改选项

于 2014-03-11T18:42:00.157 回答
1

由于在 Windows 上,驱动程序管理器(在这种情况下为 unixODBC)只作用于驱动程序标记,DSN 中的所有其他条目都由驱动程序来解释。它没有注意到有一个 database= 条目,并且神奇地知道在这个驱动程序中它应该执行一个“USE”命令,并且对于另一个调用 SQLSetConnectAttr(SQL_ATTR_CURRENT_CATALOG)。

在我的 MySQL 驱动程序副本上,它当然使用了 database= 条目。但是,我会检查 1. 您正在使用的驱动程序副本是为使用 unixODBC lib 访问共享配置文件 (libodbcinst.so) 而构建的,或者驱动程序正在直接读取它,并且正在读取相同的 ini 文件作为 unixODBC。可能使用 strace 检查加载驱动程序后打开了哪些 ini。也许尝试设置 ODBCINI=/path/to/your/odbc.ini

于 2011-06-16T08:25:01.563 回答