Haskell, HDBC, ODBC, MySQL и Mac OS X

Я пытаюсь использовать Haskell (версия 6.10.3) и HDBC для подключения к базе данных MySQL. Я решил сделать это с помощью Haskell ODBC. Я использовал cabal для установки HDBC (2.1.1) и HDBC-ODBC (2.1.0.0). Я скачал и установил драйвер MySQL ODBC (5.1.5). Я использовал macports для установки unixODBC (2.2.14_1). Все это поверх Mac OS X (10.5.8).

Я в основном использовал инструкции на этой странице http://en.wikibooks.org/wiki/Haskell/Database. Примерно в этот момент:

"# Добавьте драйвер mysql в файл odbcinst.ini (в $ODBC_HOME/etc/) и свой источник данных в $HOME/.odbc.ini."

Похоже, что версия macix для unixODBC устанавливает все в / opt / local /. Я поместил файл odbcinst.ini в / opt / local / etc / и создал в своем домашнем каталоге файл.odbc.ini, который выглядит примерно так (обратите внимание, что я экспериментировал с UID против USERNAME и PWD против ПАРОЛЬ):

[Источники данных ODBC]
myodbc = MySQL ODBC 5.1 Драйвер

[ODBC]
Trace         = 0
TraceAutoStop = 0
TraceFile     =
TraceLibrary  =

[MyODBC]
Driver      = /usr/local/lib/libmyodbc5.so
БАЗА ДАННЫХ = [скрыто]
ОПИСАНИЕ = [скрыто]
SERVER      = localhost
ПОРТ = 3306
UID         = [скрыто]
PWD         = [скрыто]
ПАРОЛЬ = [скрыто]
ПОЛЬЗОВАТЕЛЬ = [скрыто]

И я написал и скомпилировал эту программу на Haskell:

импорт базы данных.HDBC.ODBC
импорт базы данных.HDBC
Система импорта

main = do
  args <- getArgs
  c <- connectODBC (аргументы!! 0)
  таблицы <- getTables c
  mapM_ putStrLn $ таблиц

Когда я пытаюсь указать DSN "DSN=myodbc", он выдает следующее сообщение:

База данных: SqlError 
  {seState = "[\"HY000\"]", 
    seNativeError = -1, 
    seErrorMsg = "connectODBC/sqlDriverConnect: 
      [\"1045: [unixODBC][MySQL][Драйвер ODBC 5.1] Доступ 
        отказано для пользователя 'jamie'@'localhost' (используя пароль: YES)\"]"}

Однако, когда я пытаюсь указать DSN "DSN=myodbc;UID=[скрытый];PWD=[скрытый]", в нем перечислены все таблицы в базе данных.

2 ответа

Это может быть проблема unixODBC, а не проблема Haskell / HDBC / HDBC-ODBC. Запуск "isql myodbc" приводит к "ошибке шины". Запуск "isql -v myodbc" больше не дает информации. Запуск isql [uid] [pwd] подключается просто отлично.

iODBC, поддерживаемый и поддерживаемый моим работодателем, входит в состав Mac OS X начиная с Jaguar (10.2.x).

Вам будет лучше обновить iODBC всеми последними исправлениями (Apple отстает от них), чем переходить на UnixODBC.

Как правило, лучше всего хранить все настройки ODBC в расположениях файлов по умолчанию для Mac OS X -

/Library/ODBC/odbc.ini
/Library/ODBC/odbcinst.ini
/Users/*/Library/ODBC/odbc.ini
/Users/*/Library/ODBC/odbcinst.ini

Вы можете создавать символические ссылки из любого места, где вы можете захотеть иметь эти файлы, например:

ln -s ~/Library/ODBC/odbc.ini ~/.odbc.ini

Наконец, вы можете получить выгоду от тестирования с коммерческим драйвером ODBC для MySQL, например, одним из предложений моего работодателя (двухнедельная бесплатная пробная версия предоставляется как часть загрузки).

Другие вопросы по тегам