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上的说明。在这一点上:

"# 将 mysql 驱动程序添加到 odbcinst.ini 文件(在 $ODBC_HOME/etc/ 下)和 $HOME/.odbc.ini 中的数据源。"

看起来 unixODBC 的 macports 版本将所有内容都安装在 /opt/local/ 下。我已经将 odbcinst.ini 放入 /opt/local/etc/ 并在我的主目录中创建了一个 .odbc.ini ,看起来像这样(请注意,我已经尝试过 UID vs. USERNAME 和 PWD vs密码):

[ODBC 数据源]
myodbc = MySQL ODBC 5.1 驱动程序

[ODBC]
跟踪 = 0
跟踪自动停止 = 0
跟踪文件 =
跟踪库 =

[myodbc]
驱动程序 = /usr/local/lib/libmyodbc5.so
数据库 = [隐藏]
描述 = [隐藏]
服务器 = 本地主机
端口 = 3306
UID = [隐藏]
PWD = [隐藏]
密码 = [隐藏]
用户 = [隐藏]

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

导入数据库.HDBC.ODBC
导入数据库.HDBC
导入系统

主要=做
  args <- getArgs
  c <- connectODBC (args!!0)
  表 <- getTables c
  mapM_ putStrLn $ 表

当我尝试“DSN = myodbc”的DSN时,它会出错:

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

但是,当我尝试“DSN=myodbc;UID=[hidden];PWD=[hidden]”的 DSN 时,它会列出数据库中的所有表。

4

2 回答 2

1

This may be a unixODBC problem rather than a Haskell / HDBC / HDBC-ODBC problem. Running "isql myodbc" results in a "Bus Error". Running "isql -v myodbc" doesn't give any more information. Running isql [uid] [pwd] connects just fine.

于 2009-08-31T09:08:17.877 回答
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

最后,您可能会受益于使用用于 MySQL 的商业 ODBC 驱动程序进行测试,例如我雇主的产品之一(作为下载的一部分提供两周免费试用)。

于 2012-11-12T18:21:51.890 回答