использование драйвера unixodbc для подключения к mysql, база данных по умолчанию не работает - PullRequest
0 голосов
/ 16 июня 2011

У меня есть файл конфигурации 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 =

И проблема в том, что он не будет использовать базу данных, как указано выше, то есть 'test'.

Что мне нужно сделать, это вручную выполнить прямой SQL для перехода в базу данных и выполнить мой запрос:

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

Любая идея о том, как мне избавиться от «теста USE», который является командой mysql,Почему unixodbc не устанавливает 'test' в качестве базы данных по умолчанию, поскольку она уже указана в файле conf?

Ответы [ 2 ]

1 голос
/ 11 марта 2014
[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

1 голос
/ 16 июня 2011

Как и в Windows, диспетчер драйверов (в данном случае unixODBC) действует только для тега драйвера, все остальные записи в DSN должны интерпретироваться драйвером. Он не замечает, что в базе данных есть запись =, и по волшебству знает, что в этом драйвере он должен выполнить команду «USE», а для другого вызова SQLSetConnectAttr (SQL_ATTR_CURRENT_CATALOG).

В моей копии драйвера MySQL он, безусловно, использует запись database =. Однако я бы проверил, что 1. Копия используемого вами драйвера создана для использования библиотеки unixODBC lib для доступа к общему файлу конфигурации (libodbcinst.so), либо драйвер читает его напрямую и читает тот же INI-файл. как unixODBC. Возможно, проверьте с помощью strace, чтобы увидеть, какой ini открывается после загрузки драйвера. Может быть, попробуйте установить ODBCINI = / путь / к / ваш / odbc.ini

...