Haskell、HDBC、ODBC、MySQL和Mac OS X

3
我正在尝试使用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。大约在这一点上:
“# Add the mysql driver to odbcinst.ini file (under $ODBC_HOME/etc/) and your data source in $HOME/.odbc.ini.”
看起来macports版本的unixODBC将所有内容都安装在/opt/local/下。我已将odbcinst.ini放入/opt/local/etc/中,并在我的主目录中创建了一个.odbc.ini,它看起来像这样(请注意,我已尝试过UID vs. USERNAME和PWD vs PASSWORD):
[ODBC 数据源]
myodbc = MySQL ODBC 5.1 驱动程序
[ODBC] Trace = 0 TraceAutoStop = 0 TraceFile = TraceLibrary =
[myodbc] Driver = /usr/local/lib/libmyodbc5.so DATABASE = [隐藏] DESCRIPTION = [隐藏] SERVER = localhost PORT = 3306 UID = [隐藏] PWD = [隐藏] PASSWORD = [隐藏] USER = [隐藏]

我编写并编译了这个 Haskell 程序:

import Database.HDBC.ODBC
import Database.HDBC
import System
main = do args <- getArgs c <- connectODBC (args!!0) tables <- getTables c mapM_ putStrLn $ tables

当我尝试使用 "DSN=myodbc" 的 DSN 时,它会报错:

数据库:SqlError
  {seState = "[\"HY000\"]",
    seNativeError = -1,
    seErrorMsg = "connectODBC / sqlDriverConnect:
      [\"1045:[unixODBC] [MySQL] [ODBC 5.1驱动程序]用户'jamie'@'localhost'被拒绝访问(使用密码:是)\"]"}

然而,当我尝试使用“DSN = myodbc; UID = [hidden]; PWD = [hidden]”的DSN时, 它列出了数据库中的所有表。


它看起来有点类似于这个 http://software.complete.org/software/issues/show/106 ,但是如果我尝试使用 runghc 而不是编译,它会出现“无法加载 .so/.DLL 文件:odbc”的错误,因此我所有的测试都是使用已编译版本进行的。 - Jamie McCrindle
2个回答

1

这可能是一个unixODBC问题,而不是Haskell/HDBC/HDBC-ODBC问题。运行“isql myodbc”会导致“总线错误”。运行“isql -v myodbc”没有提供更多信息。运行isql [uid] [pwd]可以正常连接。


0

iODBC是一款与我的雇主相关的维护和支持的程序,自Jaguar(10.2.x)以来已作为Mac OS 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测试中受益,例如我雇主提供的其中之一(下载时提供两周免费试用)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接