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, например, одним из предложений моего работодателя (двухнедельная бесплатная пробная версия предоставляется как часть загрузки).